C# 显示NUnit测试Azure DevOps上的代码覆盖率

C# 显示NUnit测试Azure DevOps上的代码覆盖率,c#,azure-devops,nunit,C#,Azure Devops,Nunit,我已经在Azure DevOps上设置了一个新的管道,用于构建和运行项目测试。测试是用NUnit编写的 在管道中,我正在使用VSTest@2task运行单元测试,我将codeCoverageEnabled添加到true 最后管道运行,当我进入作业的“代码覆盖率”选项卡时,它允许我下载.codecoverage文件,但它不会在选项卡中显示其内容。我的理解是这应该发生 我怎样才能解决这个问题 感谢默认情况下,VSTest任务的代码覆盖率将输出到.codecoverage文件,Azure DevOps

我已经在Azure DevOps上设置了一个新的管道,用于构建和运行项目测试。测试是用NUnit编写的

在管道中,我正在使用
VSTest@2
task运行单元测试,我将
codeCoverageEnabled
添加到
true

最后管道运行,当我进入作业的“代码覆盖率”选项卡时,它允许我下载.codecoverage文件,但它不会在选项卡中显示其内容。我的理解是这应该发生

我怎样才能解决这个问题


感谢

默认情况下,VSTest任务的代码覆盖率将输出到
.codecoverage
文件,Azure DevOps不知道如何解释该文件,仅作为可下载文件提供。您需要使用一些
DotNetCoreCLI
任务,并能够在azure管道中的“代码覆盖率”选项卡上显示代码覆盖率结果

所以,如果您使用的是.NETCore,那么有一种方法可以做到这一点

步骤1 在测试项目中添加
Coverlet.collector
nuget包

步骤2 更改您的
azure pipelines.yml
以包含以下代码覆盖范围: 如果您有
CodeCoverage.runsettings
文件中的任何设置,也可以保留它们

- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    projects: '**/*.Tests/*.csproj'
    arguments: -c $(BuildConfiguration) --collect:"XPlat Code Coverage" -- RunConfiguration.DisableAppDomain=true
    testRunTitle: 'Run Test and collect Coverage' 
  displayName: 'Running tests'

- task: DotNetCoreCLI@2
  inputs:
    command: custom
    custom: tool
    arguments: install --tool-path . dotnet-reportgenerator-globaltool
  displayName: Install ReportGenerator tool

- script: reportgenerator -reports:$(Agent.TempDirectory)/**/coverage.cobertura.xml -targetdir:$(Build.SourcesDirectory)/coverlet/reports -reporttypes:"Cobertura"
  displayName: Create reports

- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: $(Build.SourcesDirectory)/coverlet/reports/Cobertura.xml  
上述代码还需要注意的一点是。根据您使用的.net core版本,可能需要获得不同版本的工具


更多信息也可以在

上找到,我还不明白为什么,但似乎我无法使用
dotnet
二进制文件进行构建。但如果我理解正确,我需要使用coverlet将.codecoverage文件转换为Cobertura格式,以便正确显示代码覆盖率?coverlet是实现这一功能的重要元素,但不是唯一已知的方法。由于您无法访问
dotnet
,因此我假定您在.Net Framework上。您也可以尝试其他方法,例如或为报表生成器输入,但我没有这些经验。我刚刚收到有关此问题的警报,我意识到我没有对您的详细回答表示感谢。。。所以谢谢你,伙计D没有机会回顾这一点,但肯定会的。仅供参考:我能够使用msbuild任务来构建框架项目,然后调用上述任务来运行测试并获得代码覆盖率。这不是很理想,但它确实为我完成了工作。