You need to enable JavaScript to run this app. Visual Studio 2019存在单元测试但代码覆盖率结果显示未覆盖问题
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2019存在单元测试但代码覆盖率结果显示未覆盖问题

问题原因拆解

  • SpliceController.<>c是C#编译器为Lambda、异步方法、迭代器等语法糖自动生成的闭包类,属于编译器生成的内部代码,同一个方法多次列出是不同执行分支生成的对应闭包代码。
  • 覆盖率为0%、[ExcludeFromCodeCoverage]特性不生效核心是你的.runsettings配置缺失必要规则,同时可能存在操作、环境适配问题。

解决步骤

  1. 补全.runsettings配置规则
    你当前的配置没有声明识别[ExcludeFromCodeCoverage]特性,也没有排除编译器生成的闭包类,在<CodeCoverage>节点下新增以下配置:
<!-- 识别ExcludeFromCodeCoverage特性,排除对应代码 -->
<Attributes>
  <Exclude>
    <Attribute>^System\.Diagnostics\.CodeAnalysis\.ExcludeFromCodeCoverageAttribute$</Attribute>
  </Exclude>
</Attributes>

同时在<Functions><Exclude>节点下新增规则,排除编译器生成的闭包类:

<Function>.*&lt;&gt;c.*</Function>

如果你的Controller方法多为异步方法,可以额外加规则排除异步生成的状态机代码:

<Function>.*IAsyncStateMachine.*</Function>
  1. 确认操作与环境配置
  • 确保VS2019版本升级到16.8及以上,该版本才完整支持.NET 5的代码覆盖率收集。
  • 单元测试项目需显式安装Microsoft.CodeCoverage NuGet包,版本匹配你的.NET 5 runtime。
  • 主API项目的生成配置中,调试信息设置为「可移植」或「完整」(右键项目>属性>生成>高级>调试信息)。
  • 执行测试时选择「测试」菜单下的「分析所有测试的代码覆盖率」,而非普通的运行测试,普通运行不会收集覆盖率数据。
  • 确认你已经在VS中指定了自定义runsettings:测试>配置运行设置>选择解决方案中的codecoverage.runsettings文件。
  1. 排查极端情况
    如果以上操作后覆盖率还是为0,检查你的单元测试代码是否真的触发了Controller的实际执行逻辑:
  • 确认Moq模拟的依赖没有被设置为跳过实际方法调用,不要随意使用mock.CallBase = false的配置。
  • 检查测试方法有没有加[TestMethod]特性,测试执行时没有被过滤跳过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 04:36:04