当前位置: 首页 > 知识库问答 >
问题:

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

明财
2023-03-14

我试图了解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是否使用:

  • 分支机构覆盖范围

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

如果有一位比我更了解情况的人能从所有这些观察中理解,并能解释Eclipse使用的度量标准,以及进度条与百分比相比意味着什么,我将不胜感激?

共有3个答案

商开济
2023-03-14

在不确定的情况下,这是我的尝试:

  • 条形图按长度对指令数进行编码(用颜色对未覆盖的指令进行编码)
  • 第18行突出显示为通过条件未测试的一个分支,如y

逑翰翮
2023-03-14

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

jacoco的文档在这里。

它允许在“线路”和“分支”覆盖范围之间切换,其定义如下:

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

如果类文件尚未使用调试信息编译,则可以将决策点映射到源代码行并相应地高亮显示:

没有覆盖范围:该行没有执行分支(红钻石)

部分覆盖:仅执行了行中的一部分分支(黄色菱形)

全覆盖:行内所有分支均已执行(绿钻)

岳阳飙
2023-03-14

我相信它只是语句覆盖和分支覆盖,没有别的。(AFAIK,没有真正提供条件覆盖的代码覆盖工具。)

覆盖率窗口中显示的百分比仅指第一个指标(报表覆盖率),所以它都是100%。

 类似资料:
  • 11.3. 测试覆盖率 就其性质而言,测试不可能是完整的。计算机科学家Edsger Dijkstra曾说过:“测试能证明缺陷存在,而无法证明没有缺陷。”再多的测试也不能证明一个程序没有BUG。在最好的情况下,测试可以增强我们的信心:代码在很多重要场景下是可以正常工作的。 对待测程序执行的测试的程度称为测试的覆盖率。测试覆盖率并不能量化——即使最简单的程序的动态也是难以精确测量的——但是有启发式方法

  • 我最近在我的Eclipse设置中做了一些改动,主要是我将Java版本从8升级到了15,我花了一段时间才注意到,但是我不能再对我的任何项目进行覆盖测试了,因为它抛出了一个Java.lang.Instrument.IllegalClassFormatException和一个巨大的StackTrace。 它还会弹出一个错误,上面写着“no tests found with test runner'jun

  • 对不起我的英语。我对junit测试有问题。客户机要求覆盖所有类,即使是dto/model/entity(即使是错误的,我也必须这样做)。但我在测试getter和setter时遇到困难。我无法覆盖,我已经测试了许多解决方案,但要么覆盖率为0,要么出现错误,我该怎么办? 我的班级: 我的班级测试 always error,例如last when:when()需要的参数必须是“模拟的方法调用”。例如:w

  • v2.0 Codecov报表 , 从2017-12-29后开始统计 测试覆盖率为 : , 可以从 https://codecov.io/gh/apache/dubbo 页面得到覆盖率报表 v1.0 基于 2.0.12 版本,统计于 2012-02-03

  • 我在测试android以创建覆盖率测试报告时遇到问题。我使用./gradlew createDebugCoverageReport命令创建覆盖率报告。已创建报告,但所有测试的结果均为%0。第一个设备已植根,但第二个设备未植根。我们使用这两个设备测试勺子,并查看勺子输出。所以这两个设备一起使用。问题:当我们使用第一个设备(根设备)运行此命令时,将按预期创建所有覆盖率测试结果,但当我们同时使用两个设备

  • 问题内容: 在我正在从事的项目中,我们有通过Selenium编写的功能测试。该应用程序随每个功能发行版进行功能更改。 有没有一种工具/机制可以跟踪自动化功能测试中的差距,以便至少手动测试人员可以关注这些领域? 注意:我们并未执行FTDD,因此即使我们确保较高的单元测试覆盖率,功能测试覆盖率也可能会很差。我们使用NCover检查单元测试范围。 问题答案: 据我所知,至少有两个(商业但便宜)的工具可让