You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5 Web API 基于Coverlet生成代码覆盖率避免测试重复拷贝方案咨询

解决方案

1. 清理冗余测试项目,统一单测试项目配置

  • 删掉额外创建的Collector和MSBuild对应测试项目,仅保留原有基于Xunit编写的Tests项目即可,Coverlet的两种触发组件不需要拆分对应不同测试项目
  • 在Tests项目的.csproj文件中同时引入两个Coverlet依赖:
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.0">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.msbuild" Version="3.1.0">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
  • 确保Tests项目引用所有需要统计覆盖率的业务项目:
<ProjectReference Include="..\你的主Web项目名.csproj" />
<ProjectReference Include="..\你的Infrastructure项目名.csproj" />
<ProjectReference Include="..\你的Models项目名.csproj" />

2. 配置覆盖率统计范围,覆盖全量业务代码

默认Coverlet仅统计和测试用例直接关联的程序集,这是你目前只有PrimeController有覆盖率数据的核心原因,手动指定统计范围即可解决,两种配置方式可选:

方式1:运行命令传参(临时调试用)

  • Collector触发方式命令:
    dotnet test --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Include="[你的主Web项目名]*,[你的Infrastructure项目名]*,[你的Models项目名]*"
  • MSBuild触发方式命令:
    dotnet test /p:CollectCoverage=true /p:Include="[你的主Web项目名]*,[你的Infrastructure项目名]*,[你的Models项目名]*"

方式2:配置文件永久生效(推荐)

在Tests项目根目录新建coverlet.runsettings文件,内容如下,可灵活配置包含/排除规则:

<?xml version="1.0" encoding="utf-8" ?>
<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="XPlat Code Coverage">
        <Configuration>
          <Include>[你的主Web项目名]*,[你的Infrastructure项目名]*,[你的Models项目名]*</Include>
          <Exclude>[*Tests*]*</Exclude>
          <ExcludeByFile>**/Migrations/**,**/Program.cs,**/Startup.cs</ExcludeByFile>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

后续运行测试时直接指定配置文件即可,无需每次传参:
dotnet test --settings coverlet.runsettings

如果使用MSBuild触发,也可以直接把规则写到Tests项目的.csproj文件中:

<PropertyGroup>
  <CollectCoverage>true</CollectCoverage>
  <Include>[你的主Web项目名]*,[你的Infrastructure项目名]*,[你的Models项目名]*</Include>
  <Exclude>[*Tests*]*</Exclude>
  <ExcludeByFile>**/Migrations/**,**/Program.cs,**/Startup.cs</ExcludeByFile>
</PropertyGroup>

配置完成后直接运行dotnet test就会自动生成全量代码覆盖率报告。

3. 配置验证

运行测试命令后检查生成的覆盖率报告,确认:

  • 主Web项目所有控制器的覆盖率数据正常展示
  • Infrastructure项目的服务、仓储逻辑覆盖率数据正常展示
  • 测试项目本身、迁移文件、启动类等不需要统计的内容已被排除

内容的提问来源于stack exchange,提问作者Bharat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:36:03