运行 dotnet test --collect "Code coverage"时如何设置自定义覆盖结果文件路径?

How to set a custom coverage result file path when running dotnet test --collect "Code coverage"?

我按照 http://tdc1tfsapp01:8080/tfs/DefaultCollection/SharpTop/_packaging?_a=package&feed=dayforce&package=OrchardCore.Cms.Web&version=1.0.20098.7+1bcd36b1f8efd5484af49f8ec39c21060a64391e&protocolType=NuGet 上的说明进行操作,它确实生成了二进制覆盖率结果文件,并在构建时向其显示 link。

但是,我想将它转换为 Cobertura,以便在构建本身上发布。这是一个相当复杂的过程,需要:

  1. 下载 https://www.nuget.org/packages/Microsoft.CodeCoverage/ 包并在里面找到 CodeCoverage.exe。
  2. 运行 CodeCoverage.exe 将二进制覆盖结果转换为相应的 XML.
  3. 安装报告生成器 dotnet 工具
  4. 运行 将 XML 转换为 Cobertura
  5. 的报告生成器工具
  6. 我们终于可以发布到构建了

我的问题是在构建过程中我不知道二进制结果放在哪里。所以,我的问题是 - 我们可以自定义它的位置吗?

找到了。需要做三件事:

  1. 关闭自动发布来自 DotNetCoreCLI@2 test 命令的测试结果。这可以防止它注入自己的结果目录。
  2. -r参数中传递你自己的目录。
  3. 添加显式任务以发布测试结果。

以下是我 运行 测试的方式:

- task: DotNetCoreCLI@2
  name: Test
  displayName: Test
  inputs:
    command: 'test'
    publishTestResults: false
    arguments: '-c Release --no-build -l trx -r "$(Build.StagingDirectory)\tests" --collect "Code coverage"'

覆盖结果为$(Build.StagingDirectory)\tests\<SOME GUID>\*.coverage

您可以使用以下参数设置自定义覆盖路径是命令输入:

--results-directory D:\Desired\Location\

示例:

- task: DotNetCoreCLI@2
  displayName: Test
  inputs:
    command: test
    projects: src/folder1/folder2/ProjectTests.csproj
    arguments: --results-directory D:\a\_work\_DesiredLocation --configuration $(BuildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura