Java 在enum'上迭代时,使用JaCoCo的声纳中的部分分支覆盖;s值

Java 在enum'上迭代时,使用JaCoCo的声纳中的部分分支覆盖;s值,java,for-loop,enums,sonarqube,jacoco,Java,For Loop,Enums,Sonarqube,Jacoco,在SonarQube中,我注意到一些令人惊讶的行为,比如 for (final MyEnum myEnum : MyEnum.values()) { ... } 其中MyEnum是在我的项目中定义的自定义enum。包含for语句的行显示为未覆盖的分支,即使周围的代码和循环体被标记为已覆盖(实际上它们至少通过一个测试运行) 我不理解这种行为。由于values()在内部返回MyEnum[],因此这种for循环的计算结果应该与for(int i=0;i

在SonarQube中,我注意到一些令人惊讶的行为,比如

for (final MyEnum myEnum : MyEnum.values()) {
    ...
}
其中
MyEnum
是在我的项目中定义的自定义
enum
。包含
for
语句的行显示为未覆盖的分支,即使周围的代码和循环体被标记为已覆盖(实际上它们至少通过一个测试运行)

我不理解这种行为。由于
values()
在内部返回
MyEnum[]
,因此这种
for
循环的计算结果应该与
for(int i=0;i
相当,其中
将是
值()的结果
存储在一个临时变量中。显然这里有一个分支,但由于数组中有超过0个元素,因此进入循环的分支和中断循环的分支都会被执行


那么,为什么我不认为这一行具有完整的分支覆盖范围呢?

声纳的这一令人惊讶的结果在我这方面是一种误解。分支覆盖范围的缺乏是由于在这个特定方法中缺乏代码覆盖。因为代码根本没有被覆盖(与我在问题中最初的想法和写作相反),也不能是for循环中的分支。

添加带有空集合的测试是否有帮助?您所说的“带有空集合的测试”是什么意思?使用
MyEnum.values()
可能不可能,但我只是好奇,在for-each循环中添加带有空iterable的测试是否会使分支显示为覆盖。