java - 请确认/评论我在 EclEmma Eclipse 插件中看到的分支覆盖率问题

标签 java unit-testing eclipse-plugin code-coverage

使用 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/

相关文章:

eclipse-plugin - openshift eclipse插件安装

java - 如何在docker内持久保存在tomcat上运行的spring boot应用程序的 session

java - 如何使用 foreach 循环检测 ArrayList 中的字符串?

java - TDD:我是否必须定义我的代码不应该做的所有事情?

unit-testing - 针对条件 (A && B && C) || 执行 MCDC D

java - Eclipse 3.4的Maven安装目录在哪里

java - 使用 eclipse 无法在 java 中解决 PMD 错误

java - 修复 Java jdbc 到 DB2 的无效数据对话

.net - 在VS2008中创建单元测试,不必要的引用?

java - 在 Eclipse RCP 中将焦点设置到 Eclipse 控制台 View