JaCoCo与IntelliJ代码覆盖率工具If Else条件覆盖率结果不一致问询
结论
这不是JaCoCo的问题,属于两款覆盖率工具的统计逻辑差异导致的正常现象。
差异原因
- 统计基准不同:IntelliJ自带的覆盖率工具基于源码层面做分支统计,仅识别代码中显式写出的逻辑分支。你编写的测试用例已经覆盖了
&&逻辑运算符的4种显式组合(两个条件都为真、第一个假第二个假、第一个真第二个假、第一个假第二个真),因此IntelliJ判定条件覆盖率为100%。 - JaCoCo基于JVM字节码做覆盖率统计,Scala编译字符串
==操作时,会自动生成隐含的空值检查分支避免空指针:比如novalue == "NoValue"编译后会先判断novalue是否为null,为null直接返回false,再执行后续的equals比较。你的测试用例中没有传入novalue = null、platform = null的场景,这两个隐含的空值判断分支未被覆盖,因此JaCoCo会显示条件仅部分覆盖。
验证方案
你可以在测试用例中补充以下两个用例,再次运行JaCoCo覆盖率检测就能达到100%覆盖:
ifElse(null, "PLATFORM") should be(false) ifElse("NoValue", null) should be(false)
内容的提问来源于stack exchange,提问作者STH
相关产品推荐
相关产品推荐

