我有一个大型 .NET Framework 解决方案,并希望开始收集代码覆盖率数据作为我们构建管道的一部分(以及在我们的本地开发人员机器上)。
在 Coverlet GitHub 页面上,它说它支持 .NET Framework 项目,但所有示例都使用dotnet test
CLI 命令。
是否可以为此使用 Coverlet,或者我应该查看 OpenCover 之类的东西?
我有一个大型 .NET Framework 解决方案,并希望开始收集代码覆盖率数据作为我们构建管道的一部分(以及在我们的本地开发人员机器上)。
在 Coverlet GitHub 页面上,它说它支持 .NET Framework 项目,但所有示例都使用dotnet test
CLI 命令。
是否可以为此使用 Coverlet,或者我应该查看 OpenCover 之类的东西?
dotnet test --collect:"XPlat Code Coverage"
选项1
使用任务Visual Studio Test
创建一个 .runsettings 文件并在 .runsettings 中配置 Coverlet(请参阅https://github.com/tonerdo/coverlet/blob/master/Documentation/VSTestIntegration.md#coverlet-options-supported-by-vstest-integration)
引用任务中的 .runsettings 文件
勾选选项Code coverage enabled
如果这不起作用,请使用任务发布测试任务生成Publish code coverage results
的 corbertura 文件(默认名称:)coverage.cobertura.xml
选项 2
<PropertyGroup>
<VSTestTaskAssemblyFile>$(MSBuildThisFileDirectory)\..\packages\Microsoft.TestPlatform.Build.16.6.1\lib\netstandard2.0\Microsoft.TestPlatform.Build.dll</VSTestTaskAssemblyFile>
<VSTestConsolePath>$(MSBuildThisFileDirectory)..\packages\Microsoft.TestPlatform.Portable.16.6.1\tools\netcoreapp2.1\vstest.console.dll</VSTestConsolePath>
<CoverletOutputFormat>cobertura</CoverletOutputFormat>
</PropertyGroup>
MSBuild
任务
<your-project>.csproj /p:CollectCoverage=true /t:VSTest
Publish code coverage results
的corbertura文件(默认名称:)coverage.cobertura.xml
MSBuild
我发现所有这些方法都有问题,使用 XAML 应用程序构建一个大型 repo,以及一些旧的项目格式 *.*proj 文件。对我有用的解决方案是:
特别是一个问题是设置enableCodeCoverage: true
使用了 MS CoverCoverage.exe,它会阻止在 Azure DevOps 中查看格式良好的结果
在 yaml 中,它看起来像:
- task: NuGetCommand@2
displayName: Restore NuGet Packages
inputs:
command: 'restore'
restoreSolution: Path/To/My.sln
feedsToUse: 'select'
vstsFeed: 'MyCompany/PrivateFeed'
includeNuGetOrg: true
- task: MSBuild@1
displayName: 'Build'
inputs:
solution: Path/To/My.sln
msbuildArchitecture: 'x64'
configuration: Release
msbuildArguments: /p:DebugSymbols=true /p:DebugType=portable -m
- task: NuGetCommand@2
displayName: 'Restore Coverlet Adapter'
inputs:
command: custom
restoreDirectory: .\
arguments: 'install coverlet.collector -Version 3.0.3 -ExcludeVersion'
- task: DotNetCoreCLI@2
inputs:
command: test
arguments: Path/To/My.sln --no-build -a $(Build.SourcesDirectory)\coverlet.collector\build\netstandard1.0 --collect:"XPlat Code Coverage"
- task: reportgenerator@4
inputs:
reports: $(Pipeline.Workspace)\**\coverage.cobertura.xml
targetdir: 'coveragereport'
reporttypes: 'HtmlInline_AzurePipelines;Cobertura'
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: 'Cobertura'
summaryFileLocation: 'coveragereport/cobertura.xml'
reportDirectory: 'CoverageReport'