我有一个 .Net 解决方案,其中包含两个 dotnet 核心类库及其相关的单元测试项目。
当我运行
dotnet test **\*.Tests.csproj --collect "Code Coverage"
命令时,它会为每个单元测试项目生成单独的 .coveragexml 文件。
我的要求是将所有 .coveragexml 文件合并到一个文件中,并使用它来获取整个解决方案的总覆盖率矩阵。
是否有任何工具或脚本可以实现这一点?
注:
有一个名为 dotnet-coverage 的 dotnet 工具可以做到这一点。
安装在机器上(或您的构建服务器,如果这是用于您的管道):
dotnet tool install --global dotnet-coverage
使用您喜欢的工具生成覆盖范围,然后您可以使用
dotnet-coverage
将它们全部合并到一个文件中。
dotnet 测试文件(.coverage):
dotnet-coverage merge *.coverage --recursive --output merged.coverage
dotnet 测试 XML 覆盖率文件 (.xml):
dotnet coverage merge *.xml --recursive --output coverage.xml --output-format xml
床罩 (.cobertura.xml):
dotnet-coverage merge *.cobertura.xml --recursive --output merged.cobertura.xml --output-format cobertura
要在管道中使用它,请像这样设置您的步骤(这是用于 Coverlet,但可以轻松调整):
steps:
- task: DotNetCoreCLI@2
displayName: 'dotnet custom'
inputs:
command: custom
custom: coverage
arguments: 'merge *.coverage.xml --recursive --output MergedCoverage.cobertura.xml --output-format xml'
然后发布合并后的覆盖率报告:
steps:
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage from MergedCoverage.cobertura.xml'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: MergedCoverage.cobertura.xml
如果合并的结果没有必要仍然是 .coveragexml 格式,您可以使用 ReportGenerator 作为合并工具。
它是 GitHub 上的一个开源工具,可以接受多种输入格式(和文件),并且可以选择将其转换为其他几种格式。恐怕 .coveragexml 不是输出格式之一,而是输入格式之一。
这里是一个在命令行中运行的例子:
OpenCover.Console.exe -target:"dotnet.exe" -targetArgs:"test {solution.sln}" -output:"{outputDir}\OpenCover.xml" {-oldstyle}
有关命令的更多详细信息,请参阅ReportGenerator 文档。