Chr*_*ian 5 java short-circuiting jacoco test-coverage sonarqube
这可能是一个相当简单的问题,但我很茫然。
我有一个if语句,如下所示:
if(TheEnum.A.equals(myEnum) || TheEnum.B.equals(myEnum))
Run Code Online (Sandbox Code Playgroud)
TheEnum可以A,B,C,... G(不止4个选项)。
JaCoCo(SONAR)告诉我这里有四个条件。那些是什么?从本质上讲,我不是可以测试的整套设备
if(true || not_evaluated) => true
if(false || true) => true
if(false || false) => false
Run Code Online (Sandbox Code Playgroud)
我敢肯定我不能专门测试
if(true || true)或
if(true || false),因为短路评估不会那么远...?
如果是这样,JaCoCo / Sonar要我测试的第四个选项是什么?
您是对的,该代码存在短路。大致将其编译为字节码,如下所示(假设Java具有goto):
if(TheEnum.A.equals(myEnum)) goto ok;
if(!TheEnum.B.equals(myEnum)) goto end;
ok:
// body of if statement
end:
Run Code Online (Sandbox Code Playgroud)
因此,在JaCoCo分析字节码时,从其角度来看,您有两个独立的检查:first if和second if,它们生成四个可能的分支。您可能将其视为JaCoCo错误,但我想要对其进行强大的修复并不容易,而且也不是很令人不安,因此您可以忍受它。
| 归档时间: |
|
| 查看次数: |
1494 次 |
| 最近记录: |