Ответ 1
Я только что попробовал версию ReSharper 2016.3 EAP 4 (предварительный предварительный просмотр). Помимо выполнения unit test выполнения теперь dotCover возвращает информацию о покрытии кода для моих основных тестовых проектов .net.
Я хочу измерить охват кода моих XUnit-тестов в приложении ASP.NET Core. Инструмент для .NET Core в Visual Studio 2015 - это предварительный просмотр 2, а охват кода пока не работает.
Сообщение в блоге http://dotnetthoughts.net/measuring-code-coverage-of-aspnet-core-applications-using-opencover/ в феврале показывает обходной путь с помощью командной строки открытой обложки. Я ищу более интегрированный способ внутри Visual Studio.
Кто-нибудь слышал о более/более интегрированном способе измерения покрытия кода в сочетании с XUnit?
Я только что попробовал версию ReSharper 2016.3 EAP 4 (предварительный предварительный просмотр). Помимо выполнения unit test выполнения теперь dotCover возвращает информацию о покрытии кода для моих основных тестовых проектов .net.
Добавьте пакет NuGet Microsoft.CodeCoverage 1.0.1 на ваш project.json
.
Я работаю над Template для Asp.NET
, и сейчас я работаю над Unit Tests, поэтому я видел ваше сообщение. Вы можете увидеть проект/конфигурацию здесь.
Отказ от ответственности. Эти шаги были сделаны из Измерение охвата ядра ASP.NET с помощью OpenCover - DotNetThoughts.
Несмотря на то, что плакат говорит об этом сайте, я думал, что было бы лучше, если бы здесь были эти шаги для процветания.
ПРИМЕЧАНИЕ. Эти инструкции, ориентированные на операционную систему Windows, должны легко работать для любого O/S, поддерживаемого OpenCover и ReportGenerator.
@echo off
SET dotnet="C:\Program Files\dotnet\dotnet.exe"
SET opencover="C:\Program Files (x86)\OpenCover\OpenCover.Console.exe"
SET reportgenerator="C:\Program Files (x86)\OpenCover\ReportGenerator\ReportGenerator.exe"
SET targetargs="test"
SET filter="+[*]NAMESPACE.* -[*.Test]* -[xunit.*]* -[FluentValidation]*"
SET coveragefile=Coverage.xml
SET coveragedir=Coverage
REM Run code coverage analysis
%opencover% -oldStyle -register:user -target:%dotnet% -output:%coveragefile% -targetargs:%targetargs% -filter:%filter% -skipautoprops -hideskipped:All
REM Generate the report
%reportgenerator% -targetdir:%coveragedir% -reporttypes:Html;Badges -reports:%coveragefile% -verbosity:Error
REM Open the report
start "report" "%coveragedir%\index.htm"
+[*]NAMESPACE.*
столько раз, сколько необходимо для каждого пространства именКодировка работает для меня, для .Net Core с использованием Microsoft.CodeCoverage
, как указано выше.
Убедитесь, что в тестовый проект добавлен Microsoft.CodeCoverage
nuget
Также проверьте файл project.json на вашем основном проекте, атрибут debugType должен быть "полным", а не "переносимым"
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true,
"debugType": "full"
},
Это исправлено для меня
Coverlet (https://github.com/tonerdo/coverlet) - это новый проект, который недавно появился. Он работает вместе с msbuild и дает прямое решение для покрытия
У меня все работает с некоторыми URL-подсказками. (URL внизу)
Это "бедняга", но он запустит htm файл в вашем браузере по умолчанию с некоторыми хорошими отчетами о htm. И намного дешевле, чем версия VS 2017 ENTERPRISE!
Очевидно, вам нужно установить правильное значение __unitTestProject.
REM I call this file zzzCoverageRun.bat , or whatever name you want, but is a .bat file
REM PREREQUISITES
REM In Visual Studio, go to Tools / Nuget Package Manager / Package Manager Console
REM and run below line
REM dotnet tool install --global dotnet-reportgenerator-globaltool --version 4.0.15
set __currentDirectory=%cd%
set __sln=%__currentDirectory%\..\Solutions\My.Solution.sln
set __unitTestProject=%__currentDirectory%\..\UnitTests\My.UnitTests.csproj
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set __mydate=%%c-%%a-%%b)
For /f "tokens=1-3 delims=/:" %%a in ('time /t') do (set __mytime=%%a%%b%%c)
echo %__mydate%_%__mytime%
set __thisRunTag=%__localRepositoryName%%__mydate%_%__mytime%
set __coverageShortFileName=coverage.cobertura.xml
set __Common_TestResultsFileName=%TMP%\Zzz.TestResultsDirectory\%__thisRunTag%\%__coverageShortFileName%
REM set __ReportOutputDirectory=$(Build.SourcesDirectory)\TestResults\Coverage\Reports
set __ReportOutputDirectory=%TMP%\Zzz.CoverageResults\%__thisRunTag%
set __BuildConfiguration=Debug
REM build not needed
REM dotnet build "%__sln%"
dotnet test "%__unitTestProject%" --configuration %__BuildConfiguration% --logger:trx /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput="%__Common_TestResultsFileName%"
REM the below works because of the dotnet-reportgenerator-globaltool above
reportgenerator "-reports:%__Common_TestResultsFileName%" "-targetdir:%__ReportOutputDirectory%" -tag:%__thisRunTag% -reportTypes:htmlInline
start "" "%__ReportOutputDirectory%\index.htm"
set __coverageShortFileName=
set __currentDirectory=
set __ReportOutputDirectory=
set __sln=
set __unitTestProject=
set __Common_TestResultsFileName=
set __BuildConfiguration=
set __thisRunTag=
Мой UnitTests.csproj имеет это в нем:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<IsPackable>false</IsPackable>
<AssemblyName>My.UnitTests</AssemblyName>
<RootNamespace>My.UnitTests</RootNamespace>
</PropertyGroup>
<ItemGroup>
<None Remove="StyleCop.Cache" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="2.6.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
<PackageReference Include="Moq" Version="4.10.1" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="dotnet-reportgenerator-cli" Version="4.0.15" />
</ItemGroup>
</Project>
Примечательно, что "coverlet.msbuild" и "dotnet-reportgenerator-cli". Я знаю, что вам нужен файл "coverlet.msbuild", другой может быть просто экспериментальной вещью, которая вам может понадобиться или не понадобиться.
Я использую множество переменных bat для управления и вывода в папку% TMP%, чтобы VS/git не захотел проверять файлы.
Подсказки пришли от:
https://holsson.wordpress.com/2018/11/30/test-code-coverage-with-net-core-and-tfs/
https://tattoocoder.com/cross-platform-code-coverage-arrives-for-net-core/
OpenCover + ReportGenerator. Установите как пакеты NUGET в один из ваших тестовых проектов (один раз, потому что они просто должны появиться в папке пакета).
Затем вы можете поместить этот powershel https://github.com/rpokrovskij/opencover4vs.ps1 в свою папку решений и настроить его с помощью своих тестовых проектов, используя путь globing, например
$TestProjectsGlobbing = @(, '*. Test.csproj')
Затем вы можете запустить его как обычный Powershel script. Результат должен появиться в папке решения в\TestsResults\report\index.html