XCode测试覆盖率报告将仅含大括号的行标记为未覆盖问题咨询
问题原因
这个是Xcode测试覆盖率统计的已知固有偏差,不属于你的配置遗漏问题。
Swift编译器对包含多return分支的if-else结构计算属性插桩时,会误将末尾无任何可执行逻辑的单独闭合}标记为需要覆盖的代码行,而SonarQube直接读取Xcode生成的覆盖率原始数据,就会带出这个误报提示。你已经覆盖了if、else两个业务分支,实际逻辑覆盖率已经是100%,这个提示不代表测试有遗漏。
可用解决方案
你可以根据自己的编码习惯选择以下任意一种方案处理:
- 改用你提到的提前返回写法,实测这种写法可以消除绝大多数同类误报:
var property: Type { if condition { return value1 } return value2 }
- 用三目运算符简化计算属性写法,完全规避多分支插桩的统计误差,代码也更精简:
var property: Type { condition ? value1 : value2 }
- 不想修改业务代码的话,可以在末尾的
}行添加// NOSONAR注释,SonarQube会自动忽略这一行的覆盖率统计:
var property: Type { if condition { return value1 } else { return value2 } } // NOSONAR
- 也可以直接在SonarQube后台将该条告警标记为误报,不影响整体覆盖率统计结果。
内容的提问来源于stack exchange,提问作者Heuristic
相关产品推荐
相关产品推荐

