如何在计算C#解决方案代码覆盖率时纳入无测试覆盖的项目?
解决代码覆盖率统计包含无测试覆盖项目的问题
核心原因
dotnet test 默认仅统计被测试项目直接引用的生产项目的代码覆盖率,Project3未被任何测试项目关联,因此不会被纳入覆盖率计算范围。
具体解决方案
方法一:单独为无测试项目生成空覆盖率数据
针对Project3单独执行测试命令(无需实际测试用例),生成包含0%覆盖率的统计文件:
dotnet test --no-build --collect:"XPlat Code Coverage" --project ./Project3/Project3.csproj
执行后会在Project3的测试输出目录生成对应的coverage.cobertura.xml文件,标记其覆盖率为0%。
然后修改ReportGenerator命令,确保收集所有项目的覆盖率文件,并排除测试项目本身:
reportgenerator "-reports:./**/coverage.cobertura.xml" "-targetdir:Reports_Coverage" "-reportTypes:TextSummary" "-assemblyfilters:-*.UnitTests"
方法二:通过配置文件统一指定要统计的项目
在解决方案根目录创建coverlet.runsettings配置文件,明确列出所有需要统计的生产项目:
<?xml version="1.0" encoding="utf-8"?> <RunSettings> <DataCollectionRunSettings> <DataCollectors> <DataCollector friendlyName="XPlat Code Coverage"> <Configuration> <Include> <Module>Project1</Module> <Module>Project2</Module> <Module>Project3</Module> </Include> </Configuration> </DataCollector> </DataCollectors> </DataCollectionRunSettings> </RunSettings>
之后执行测试命令时指定该配置文件,一次生成所有项目的覆盖率数据:
dotnet test --test-adapter-path:. --collect:"XPlat Code Coverage" --settings coverlet.runsettings
再运行原有的ReportGenerator命令即可得到包含Project3的汇总报告。
验证结果
两种方法最终都会让报告包含Project3的0%覆盖率数据,总覆盖率计算为(100+100+0)/300 ≈ 67%,符合预期。
内容的提问来源于stack exchange,提问作者YuWea
相关产品推荐
相关产品推荐

