我已经在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>
此外,请在构建管道中找到Build解决方案,测试程序集和ReportGenerator任务的字样:
构建解决方案:
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)'
ReportGenerator
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'无效。找不到匹配的文件。
任何人都可以建议这里缺少什么,或者可能是潜在的问题。
对此将提供任何帮助。
谢谢
尼尔曼
答案 0 :(得分:2)
无法使用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 thread和the document以获得更多详细信息。
希望这会有所帮助。