如何将Coverlet代码覆盖率指标输出至控制台?
如何让Coverlet将代码覆盖率输出至控制台
问题描述
我使用Coverlet代码覆盖率工具运行dotnet test命令时,控制台并未输出任何覆盖率相关内容,与预期效果不符。希望能将覆盖率指标直接输出到控制台,方便本地查看。
运行的命令
➜ dotnet test /p:CollectCoverage=true /p:ExcludeByFile="**/*Migrations/*.cs" ./src/XYZ.IAM.AssetGovernance.sln Restore complete (0,4s) WorkerExtensions succeeded (1,4s) → src/AssetGovernance/obj/Debug/net8.0/WorkerExtensions/buildout/Microsoft.Azure.Functions.Worker.Extensions.dll XYZ.IAM.AssetGovernance succeeded (1,7s) → src/AssetGovernance/bin/Debug/net8.0/XYZ.IAM.AssetGovernance.dll XYZ.IAM.AssetGovernance.Tests succeeded (0,1s) → src/AssetGovernance.Tests/bin/Debug/net8.0/XYZ.IAM.AssetGovernance.Tests.dll [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 8.0.11) [xUnit.net 00:00:00.07] Discovering: XYZ.IAM.AssetGovernance.Tests [xUnit.net 00:00:00.09] Discovered: XYZ.IAM.AssetGovernance.Tests [xUnit.net 00:00:00.09] Starting: XYZ.IAM.AssetGovernance.Tests [xUnit.net 00:00:00.77] Finished: XYZ.IAM.AssetGovernance.Tests XYZ.IAM.AssetGovernance.Tests test succeeded (1,3s) Test summary: total: 22, failed: 0, succeeded: 22, skipped: 0, duration: 1,3s Build succeeded in 3,8s
使用的NuGet包
<PackageReference Include="coverlet.collector" Version="6.0.2" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" /> <PackageReference Include="Moq" Version="4.20.72" /> <PackageReference Include="xunit" Version="2.9.2" /> <PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
.NET SDK版本
9.0.100
解决方法
1. 替换Coverlet NuGet包
coverlet.collector是基于VSTest的数据收集器,默认仅生成覆盖率文件,不支持直接输出到控制台。需要将其替换为coverlet.msbuild包:
<!-- 移除原有的coverlet.collector --> <!-- <PackageReference Include="coverlet.collector" Version="6.0.2" /> --> <!-- 添加coverlet.msbuild --> <PackageReference Include="coverlet.msbuild" Version="6.0.2" PrivateAssets="all" />
PrivateAssets="all"用于避免将该包传递依赖到其他项目
2. 修改dotnet test命令参数
添加/p:CoverletOutputFormat=cmd参数,指定输出格式为控制台:
dotnet test /p:CollectCoverage=true /p:ExcludeByFile="**/*Migrations/*.cs" /p:CoverletOutputFormat=cmd ./src/XYZ.IAM.AssetGovernance.sln
如果需要同时生成覆盖率文件(如JSON格式)和控制台输出,可使用逗号分隔多个格式(注意用%2c替代逗号,避免命令行解析问题):
dotnet test /p:CollectCoverage=true /p:ExcludeByFile="**/*Migrations/*.cs" /p:CoverletOutputFormat=json%2ccmd ./src/XYZ.IAM.AssetGovernance.sln
3. 验证效果
运行修改后的命令后,控制台会在测试完成后输出类似以下的覆盖率汇总:
+-------------------------------+------+--------+--------+ | Module | Line | Branch | Method | +-------------------------------+------+--------+--------+ | XYZ.IAM.AssetGovernance | 85% | 70% | 90% | +-------------------------------+------+--------+--------+ +---------+------+--------+--------+ | | Line | Branch | Method | +---------+------+--------+--------+ | Total | 85% | 70% | 90% | +---------+------+--------+--------+
内容的提问来源于Stack Exchange,提问作者Shuzheng
相关产品推荐
相关产品推荐

