Spring Boot多模块项目Jacoco分支未覆盖问题(测试已存在)
Jacoco分支未覆盖原因分析
你的fromValue方法存在两处未被测试覆盖的分支场景:
1. value == null的判断分支未测试
fromValue方法开头的null校验分支:
if (value == null) { return null; }
当前所有测试用例都没有传入null作为参数,这个分支完全没有被执行过,因此Jacoco会标记该分支未覆盖。
2. 枚举值匹配时的部分分支未完全覆盖
在filter的lambda表达式someEnum -> someEnum.getValue().equals(value)中,每个枚举值的equals比较存在匹配成功和匹配失败两个分支:
test1用例仅覆盖了每个枚举值的匹配成功分支,但由于findFirst会在找到第一个匹配项后终止流遍历,比如传入'some-value1'时,只会执行VALUE1的equals,VALUE2和VALUE3的equals不会被调用;- 虽然
test2传入无效值时,会遍历所有枚举值并执行equals(均失败),覆盖了所有匹配失败分支,但结合test1的场景,流终止导致的未执行代码会被Jacoco标记为分支未覆盖——不过最核心的遗漏还是null参数的测试场景。
修复方案
添加测试null参数的用例即可补全所有分支覆盖:
def 'test null input'() { when: var resp = SomeEnum.fromValue(null) then: resp == null }
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

