我试图了解Eclipse使用何种类型的测试覆盖度量。
我编写了两个简单的函数如下:
public class Hello {
public void f(int a, int b) {
int sum = a + b;
if (sum > 0)
print("blue");
else if (sum < 0)
print("red");
print("done");
}
void print(String s) {
System.out.println(s);
}
public void g(int x, int y) {
if (x == 0 || y > 0) {
print("red");
} else {
print("blue");
}
}
}然后,我从单元测试中调用函数,如下所示:
import org.junit.jupiter.api.Test;
class TestHello {
@Test
void test_f() {
new Hello().f(2, 4);
new Hello().f(-1, -2);
new Hello().f(-1, 1);
}
@Test
void test_g() {
new Hello().g(0, 5);
new Hello().g(5, 0);
new Hello().g(0, 0);
//new Hello().g(5, 5);
}
}因此,对于函数g,Eclipse表示“4个分支中有1个没有完成”,并将第18行标记为黄色。

另一方面,覆盖率窗口显示函数g是100%覆盖的,而第一列上的绿色条不像函数f(我认为这些条显示离100%有多近)那么长。

所以我试着把这一切搞清楚。Eclipse是否使用:
根据覆盖率窗口上显示的%100覆盖率,它可能使用分支和条件覆盖。然而,黄色的标记线可能告诉我,它使用的是更强的东西,如mc/dc或mcc。然后,有进度条看起来像绿色的酒吧,我不知道是什么试图告诉我?
我很感激一个比我更有见识的人能够从所有这些观察中理解,并能解释Eclipse正在使用什么度量以及进度条与百分比相比意味着什么?
发布于 2018-01-15 15:40:33
我相信这只是报表和分支机构的报道,没有别的了。(AFAIK,没有真正提供条件覆盖的代码覆盖工具。)
覆盖率窗口中显示的百分比仅指第一个度量(语句覆盖率),所以这就是为什么它都是100%的原因。
发布于 2018-01-15 15:45:09
Eclipse,通过插件外引理,使用jacoco进行代码覆盖。
关于jacoco的文档是这里。
它允许在“线路”和“分支”覆盖之间切换,其定义如下:
JaCoCo还计算所有if和switch语句的分支覆盖率。此度量计算方法中此类分支的总数,并确定已执行或丢失的分支的数量。分支覆盖始终可用,即使在类文件中没有调试信息时也是如此。注意,在此计数器定义的上下文中,异常处理不被视为分支。 如果已使用调试信息编译了类文件,则可以将决策点映射到源行,并相应突出显示: 没有覆盖:行中没有分支被执行(红色菱形) 部分覆盖:只执行了行中的部分分支(黄色菱形) 全面覆盖:行中的所有分支都已执行(绿色钻石)
发布于 2018-01-15 15:45:16
在不确定的情况下,这里是我的刺:
y > 0从来没有通过快捷方式或进行验证;通过取消对行的注释(或在测试new Hello().g(1, 1)之后运行)将其变为绿色。https://stackoverflow.com/questions/48266017
复制相似问题