请教计算C#方案的代码覆盖率时,如何将未被测试覆盖的项目也包括在内?

大家好,我用Visual Studio在开发一个方案,想为里面的项目加入单元测试。

阶层如下,有 5 个项目,2 个用于测试Project1和Project2:

方案
  |
  |- Project1 (100 行)
  |- Project2 (100 行)
  |- Project3 (100 行)
  |
  |- Project1.UnitTests
  |- Project2.UnitTests

我跟随微软的教学,取得此方案的代码覆盖率,并导出为文档:

dotnet tool install dotnet-reportgenerator-globaltool --tool-path tools
dotnet test --test-adapter-path:. --collect:"XPlat Code Coverage"
reportgenerator "-reports:./**/coverage.cobertura.xml" "-targetdir:Reports_Coverage" -reportTypes:TextSummary;

虽然文档有覆盖率,但是计算未将Project3纳入公式中:

  • Project1、Project2和Project3各有100行代码,Project1、Project2都经过测试并有100%的覆盖率,而Project3则为0%(没有测试)
  • ReportGenerator给我的总覆盖率是100%(因为Project1和Project2都有100%的覆盖率)
  • 但我期望的是67%的覆盖率(将完全没有写测试的Project3纳入公式中)
    想请教如何取得包括包含无测试的项目的代码覆盖率?

谢谢。

您可以使用 coverlet 和 ReportGenerator 这两个工具来计算代码覆盖率。 coverlet 是一个 .NET Core 的开源工具,用于收集代码覆盖率信息,并将其导出为不同的格式,包括 cobertura。 ReportGenerator 是一个报告生成器,可将 cobertura 格式的代码覆盖率数据转换为各种报告格式。

您可以通过以下步骤计算代码覆盖率,包括未经过测试的 Project3:

首先,您需要安装 coverlet 和 ReportGenerator。您可以使用以下命令:

dotnet tool install -g coverlet.console
dotnet tool install -g dotnet-reportgenerator-globaltool


接下来,您需要为 Project3 创建一个单元测试项目。您可以使用以下命令:

dotnet new xunit -o Project3.UnitTests


答案来自 我点评开发社区 https://www.wodianping.com/

然后,您需要将 coverlet 集成到 dotnet test 命令中。您可以使用以下命令:

dotnet test Project1.UnitTests/ Project2.UnitTests/ Project3.UnitTests/ --collect:"XPlat Code Coverage" /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=./TestResults/


这将使用 coverlet 收集代码覆盖率数据,并将其导出为 cobertura 格式,并将结果保存在 ./TestResults/ 文件夹中。

最后,您可以使用 ReportGenerator 来生成覆盖率报告。您可以使用以下命令:

reportgenerator "-reports:./TestResults/coverage.cobertura.xml" "-targetdir:Reports_Coverage" -reportTypes:TextSummary;


这将从 ./TestResults/ 文件夹中读取 cobertura 格式的代码覆盖率数据,并将其转换为文本报告,并将结果保存在 Reports_Coverage 文件夹中。

使用以上方法,您应该能够计算出包括未经过测试的 Project3 的代码覆盖率。