[英]How does Kotlin's "as" cast operator affect branch coverage?
Jacoco(version0.8.8 Changelog )覆盖工具中的这个错误修复提供了解释:
Kotlin 编译器版本 1.6.0 及更高版本为“不安全”转换运算符添加的分支在报告生成期间被过滤掉 (GitHub 1266 )
因此,Kotlin 编译器可能会为转换生成一个隐藏分支(检查转换是否可能),然后在使用的覆盖工具中出现。
从功能的角度来看,您可能想要添加一个测试用例来涵盖result.data
不包含 int 的情况。 这也可能导致演员声明的全面报道。
虽然我不是 Kotlin 开发人员,但不安全的演员表提出了以下问题:
null != errorCode
检查表明errorCode
是Int?
而不是Int
类型,它永远不会是 null。result.data as? Int
result.data as? Int
, as?
运算符在失败时返回 null。null != errorCode
if-condition 的覆盖范围表明 true 和 false 分支都被覆盖了。 我怀疑是这种情况。 相反,编译器可能已经得出结论,条件永远不会为假(因为errorCode
具有不可为 null 的类型Int
),因此优化了 else 分支。 换句话说,切换到Int?
as?
可能会将报告的未覆盖分支移动到您的null != errorCode
if-condition,这样更有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.