【问题标题】:Unable to generate code coverage report using ReportGenerator无法使用 ReportGenerator 生成代码覆盖率报告
【发布时间】:2020-05-20 08:55:56
【问题描述】:

我在 Azure DevOps 中为我的一个 ASP.NET MVC 应用程序创建了一个构建管道。存在用于单元测试的项目,我需要生成代码覆盖率报告,为此我使用了coverlet.msbuild NuGet包和“ReportGenerator”。

以下是其中一个单元测试项目的packages.config文件:

<packages>
  <package id="coverlet.msbuild" version="2.8.0" targetFramework="net461" developmentDependency="true" />
  <package id="NUnit" version="2.6.3" targetFramework="net45" />
  <package id="ReportGenerator" version="4.4.6" targetFramework="net461" />
</packages>

另外,请在构建管道中找到构建解决方案、测试程序集和 ReportGenerator 任务的 yaml:

构建解决方案:

steps:
- task: VSBuild@1
  displayName: 'Build solution **\SmartStoreNET.sln'
  inputs:
    solution: '**\SmartStoreNET.sln'
    msbuildArgs: '/p:CollectCoverage=true /p:CoverletOutputFormat=cobertura'

测试程序集

steps:
- task: VSTest@2
  displayName: 'Test Assemblies'
  inputs:
    testAssemblyVer2: |
     **\$(BuildConfiguration)\*test*.dll
     !**\obj\**
    codeCoverageEnabled: true
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'

报告生成器

steps:
- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
  displayName: ReportGenerator
  inputs:
    reports: '$(Build.SourcesDirectory)/tests/**/coverage.cobertura.xml'
    targetdir: '$(Build.SourcesDirectory)/CodeCoverage'
    reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges'

在执行管道时,我在 ReportGenerator 任务中遇到以下错误:

报告文件模式“d:\a\1\s/tests/**/coverage.cobertura.xml”无效。找不到匹配的文件。

任何人都可以建议这里缺少什么,或者可能是什么潜在问题。

对此的任何帮助将不胜感激。

谢谢,

尼尔曼

【问题讨论】:

  • 只是检查提供的信息是否有用。如果您需要进一步的帮助,请告诉我们。

标签: nunit code-coverage azure-pipelines cobertura reportgenerator


【解决方案1】:

无法使用 ReportGenerator 生成代码覆盖率报告

AFAIK,属性 /p:CollectCoverage=true/p:CoverletOutputFormat=cobertura 用于测试任务生成覆盖结果而不是构建任务。

但是getting coverlet to run using the Visual Studio Test task有一个问题,所以我们不能直接将上述属性用于VS测试任务。

作为解决方法,您可以尝试在管道期间安装该工具,然后使用 powershell 脚本生成报告:

dotnet tool install dotnet-reportgenerator --tool-path . --version 4.0.12
dotnet tool install coverlet.console --tool-path . --version 1.4.1
mkdir .\reports
$unitTestFile = gci -Recurse | ?{ $_.FullName -like "*bin\*test*.dll" }
$coverlet = "$pwd\coverlet.exe"
& $coverlet $unitTestFile.FullName --target "dotnet" --targetargs "vstest $($unitTestFile.FullName) --logger:trx" --format "cobertura"
gci -Recurse |
?{ $_.Name -eq "coverage.cobertura.xml"} |
%{ &"$pwd\reportgenerator.exe" "-reports:$($_.FullName)" "-targetdir:reports" "-reportstypes:HTMLInline;HTMLChart" }

查看this threadthe document 了解更多详情。

希望这会有所帮助。

【讨论】:

  • 抱歉迟到了。我今天只能尝试它并收到以下错误 - “错误 NU1101:无法找到包 dotnet-reportgenerator。源中不存在具有此 ID 的包:C:\Program Files\dotnet\sdk\NuGetFallbackFolder, Microsoft Visual Studio离线包,nuget.org"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
相关资源
最近更新 更多