使用 EclEmma Eclipse 代码覆盖率插件运行此单元测试后,它返回 100% 分支覆盖率,即覆盖 4 个分支中的 4 个,我预计此处仅覆盖 4 个分支中的 2 个,即 50% 覆盖率。 如果我被证明是正确的,任何人都可以建议一个更好的分支覆盖工具。提前致谢。
@Test
public void testTT(){;
assertTrue(bar(true, true)==3);
}
@Test
public void testFF(){;
assertTrue(bar(false, false)==8);
}
int bar(boolean cond1, boolean cond2) {
int answer = 1;
if (cond1) {
answer = answer * a();
} else {
answer = answer * b();
}
if (cond2) {
answer = answer * c();
} else {
answer = answer * d();
}
return answer;
}
private int a(){
return 1;
}
private int b(){
return 2;
}
private int c(){
return 3;
}
private int d(){
return 4;
}
最佳答案
该工具是正确的。您的代码中有 4 个分支,并且所有 4 个分支都被执行。
我相信您正在寻找的是整个代码中有多少条独特路径的组合复杂性,并对此进行衡量。在您的示例中,分支数量恰好等于整个方法的路径数量。
我可以用一个稍微长一点的例子来演示差异:
@Test
public void testTTT(){;
assertTrue(bar(true, true, true)==3);
}
@Test
public void testFFF(){;
assertTrue(bar(false, false, false)==8);
}
int bar(boolean cond1, boolean cond2, boolean cond3) {
int answer = 1;
if (cond1) {
answer = answer * a();
} else {
answer = answer * b();
}
if (cond2) {
answer = answer * c();
} else {
answer = answer * d();
}
if (cond3) {
answer = answer * c();
} else {
answer = answer * d();
}
return answer;
}
在上面的示例中,有 6 个分支条件,仅用两个测试即可覆盖所有分支条件。但整个函数有8个代码路径。
没有工具可以映射出每个可能的代码路径(很肯定这样做可以解决 NP-complete 问题。)当然,测试(不平凡的)程序的所有可能输入是不现实的。使用代码覆盖率是帮助确保您的程序经过良好测试的一种工具。
关于java - 请确认/评论我在 EclEmma Eclipse 插件中看到的分支覆盖率问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36955455/