使用Coverlet进行.NET测试:如何自定义覆盖率文件名而非coverage.cobertura.xml?
给不同类型测试项目的代码覆盖率文件添加类型标识
要给单元测试、集成测试项目生成带类型前缀的覆盖率文件(如unit_tests.coverage.cobertura.xml),可以用以下几种实用方案:
方案1:通过.runsettings文件配置
为不同类型的测试项目创建独立配置文件,直接指定自定义输出文件名:
- 为单元测试创建
UnitTests.runsettings:
<?xml version="1.0" encoding="utf-8"?> <RunSettings> <DataCollectionRunSettings> <DataCollectors> <DataCollector friendlyName="XPlat Code Coverage"> <Configuration> <Format>cobertura</Format> <Output>unit_tests.coverage.cobertura.xml</Output> </Configuration> </DataCollector> </DataCollectors> </DataCollectionRunSettings> </RunSettings>
为集成测试创建
IntegrationTests.runsettings,仅修改<Output>节点值为integration_tests.coverage.cobertura.xml即可。执行对应测试时指定配置文件:
# 运行单元测试 dotnet test --settings UnitTests.runsettings --collect:"XPlat Code Coverage" # 运行集成测试 dotnet test --settings IntegrationTests.runsettings --collect:"XPlat Code Coverage"
方案2:测试后批量重命名文件
如果不想维护多个配置文件,可以先执行测试,再根据测试类型批量重命名生成的文件(以PowerShell为例):
# 处理单元测试 dotnet test ./src/YourUnitTestProject --collect:"XPlat Code Coverage" --results-directory ./coverage/unit # 递归找到覆盖率文件并重命名 Get-ChildItem ./coverage/unit -Recurse -Filter "coverage.cobertura.xml" | Rename-Item -NewName "unit_tests.coverage.cobertura.xml" # 处理集成测试 dotnet test ./src/YourIntegrationTestProject --collect:"XPlat Code Coverage" --results-directory ./coverage/integration Get-ChildItem ./coverage/integration -Recurse -Filter "coverage.cobertura.xml" | Rename-Item -NewName "integration_tests.coverage.cobertura.xml"
方案3:在测试项目的.csproj中配置
直接在每个测试项目的项目文件里指定输出文件名,无需额外配置文件:
单元测试项目的.csproj:
<Project Sdk="Microsoft.NET.Sdk"> <!-- 已有配置 --> <PropertyGroup> <!-- 添加此属性指定覆盖率文件名 --> <CodeCoverageOutputFileName>unit_tests.coverage.cobertura.xml</CodeCoverageOutputFileName> </PropertyGroup> </Project>
集成测试项目的.csproj:
将上述属性值改为integration_tests.coverage.cobertura.xml即可。
之后直接执行基础测试命令,就会自动生成带类型标识的文件:
dotnet test --collect:"XPlat Code Coverage"
内容的提问来源于stack exchange,提问作者Jorge Ivan
相关产品推荐
相关产品推荐

