Eclipse使用什么样的测试覆盖率标准?

时间:2018-01-15 15:30:39

标签: java eclipse unit-testing test-coverage

我试图了解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 行标记为黄色。

Source code line 18 marked yellow

另一方面,覆盖窗口显示功能 g 被100%覆盖,而第一列的绿色条不像函数 f 那么长我觉得这些酒吧显示你有多接近100%。

Coverage shown

所以我试图理解所有这一切。 Eclipse使用:

  • 分支机构覆盖
  • 条件覆盖率
  • 分支和条件覆盖
  • 修改后的条件/决策覆盖范围(mc / dc)
  • 多条件覆盖率(mcc)
  • 别的什么?

根据覆盖窗口上显示的%100覆盖率,它可能正在使用分支和条件覆盖。然而,黄色标记线可能告诉我它使用更强的东西,如mc / dc或mcc。然后,有一个看起来很像绿色酒吧,我不知道是什么想告诉我的?

我很感激,如果比我更有知识的人能够理解所有这些观察结果,并且可以解释Eclipse使用的度量标准以及进度条与百分比相比的意义吗?

3 个答案:

答案 0 :(得分:1)

我认为它只是声明的覆盖范围和分支覆盖范围,没有别的。 (AFAIK,没有实际提供条件覆盖范围的代码覆盖工具。)

覆盖范围窗口中显示的百分比仅指第一个指标(声明覆盖率),因此它全部为100%。

答案 1 :(得分:1)

Eclipse,通过插件eclemma,使用jacoco进行代码覆盖。

jacoco的文档是here

它允许在&#39; line&#39;之间切换。和&#39;分支&#39;覆盖范围,定义如下:

  

JaCoCo还计算所有if和switch语句的分支覆盖率。此度量标准计算方法中此类分支的总数,并确定已执行或已丢失分支的数量。即使在类文件中没有调试信息,分支覆盖也始终可用。请注意,异常处理在此计数器定义的上下文中不被视为分支。

     

如果使用调试信息编译了类文件,则可以将决策点映射到源行并相应地突出显示:

     

无覆盖:行中没有分支(红色钻石)

     

部分覆盖:行中只有部分分支已被执行(黄色菱形)

     

完全覆盖:该行中的所有分支都已执行(绿色菱形)

答案 2 :(得分:0)

不确定,这是我的刺:

  • 条形图按长度编码指令编号(将用颜色编码未覆盖的编号)
  • 第18行突出显示为未通过条件的一个分支进行测试,因为y > 0由于快捷方式OR 而永远无法验证;通过取消注释您的行(或运行以下测试new Hello().g(1, 1)
  • 将其变为绿色