我试图了解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使用的度量标准以及进度条与百分比相比的意义吗?
答案 0 :(得分:1)
我认为它只是声明的覆盖范围和分支覆盖范围,没有别的。 (AFAIK,没有实际提供条件覆盖范围的代码覆盖工具。)
覆盖范围窗口中显示的百分比仅指第一个指标(声明覆盖率),因此它全部为100%。
答案 1 :(得分:1)
Eclipse,通过插件eclemma,使用jacoco进行代码覆盖。
jacoco的文档是here。
它允许在&#39; line&#39;之间切换。和&#39;分支&#39;覆盖范围,定义如下:
JaCoCo还计算所有if和switch语句的分支覆盖率。此度量标准计算方法中此类分支的总数,并确定已执行或已丢失分支的数量。即使在类文件中没有调试信息,分支覆盖也始终可用。请注意,异常处理在此计数器定义的上下文中不被视为分支。
如果使用调试信息编译了类文件,则可以将决策点映射到源行并相应地突出显示:
无覆盖:行中没有分支(红色钻石)
部分覆盖:行中只有部分分支已被执行(黄色菱形)
完全覆盖:该行中的所有分支都已执行(绿色菱形)
答案 2 :(得分:0)
不确定,这是我的刺:
y > 0
由于快捷方式OR 而永远无法验证;通过取消注释您的行(或运行以下测试new Hello().g(1, 1)
)