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

.NET代码覆盖率未按文档统计属性的部分覆盖行数问题

自动属性代码覆盖率显示为两行的原因分析

这不是你对微软文档的理解错误,而是Visual Studio代码覆盖率工具处理自动属性时的显示特性。

核心原因

C#的自动属性(如public string APIVersion { get; set; })在编译时会被编译器拆分为两个独立的IL方法:get_APIVersion和set_APIVersion。虽然在源码中是一行代码,但编译后对应两个完全独立的代码执行块。

Visual Studio的代码覆盖率工具在将IL层面的覆盖数据映射回源码时,会把这两个方法的覆盖状态分别关联到同一源码行,但在UI展示时会拆分为两行——目的是清晰区分该行内部两个逻辑块(getter和setter)的覆盖情况,并非真的把源码行拆成了物理上的两行。

对应你的测试场景

你的单元测试仅调用了setter,因此:

  • setter对应的代码块被标记为已覆盖
  • getter对应的代码块被标记为未覆盖

工具为了展示这两个不同的状态,就把同一源码行拆成两行显示,但在覆盖率摘要统计中,该行会被归类为「部分覆盖」,这完全符合微软文档中「按行报告」的规则。

结论

这种显示行为是符合文档描述的,只是UI展示的细节容易造成误解。本质是源码一行对应编译后的两个独立方法,工具通过拆分显示来明确每个方法的覆盖状态,而统计层面仍遵循「按行报告」的规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:45:40