我们正在使用覆盖(https://github.com/tonerdo/coverlet)来衡量包含多个项目的.NET解决方案中单元测试的代码覆盖率。结果将分别显示在解决方案中的每个项目中。我们想要的是为整个解决方案提供统一的结果。
谁能建议最好的方法来做到这一点?
如果有可能通过coverlet无法实现,那么您可以建议使用CLI进行此操作的任何其他开源工具。我们本质上需要将其与CI工具集成在一起,如果覆盖率低于阈值,它将发出警告。

最佳答案

这就是我们使用coverlet.msbuild为整个解决方案生成代码覆盖率的方式。


在解决方案中的每个测试项目中引用coverlet.msbuild
在CI脚本中,导航到包含解决方案文件的目录。然后,
运行类似于以下命令(语法为bash)


dotnet test {solution_filename.sln} --logger:trx --results-directory ../TestResults \
   "/p:CollectCoverage=true" \
   "/p:CoverletOutput=../TestResults/" \
   "/p:MergeWith=../TestResults/coverlet.json" \
   "/p:CoverletOutputFormat=\"json,cobertura\""


如果在Windows上运行此命令,则可能需要转义一些传递给这些参数的字符,例如逗号(%2c)。

为了将结果合并到多个项目中,我们生成了两种输出格式:json和cobertura。参见参数/p:CoverletOutputFormat

在为每个项目生成代码覆盖率时,coverlet将使用/p:MergeWith将当前项目的coverlet.json与先前的coverlet.json合并。

这种方法为解决方案生成了一个cobertura结果文件,可在以后的CI版本中使用。

10-08 12:06