【问题标题】:Why is code coverage measured in test cases?为什么要在测试用例中测量代码覆盖率?
【发布时间】:2018-12-30 11:04:59
【问题描述】:

我使用 EclEmma 测量了代码覆盖率。我原以为只有源包正在测试中。令人惊讶的是,JUnit 测试用例也被测量了。

public class EmailTest {

public static final String VALID_MAIL = "xyz@qwe.abc";

public static final String INVALID_MAIL_WITHOUT_AT = "xyzqwe.abc";

@Test
public void shouldCreateValidEmail() {
    Email email = null;
    try {
        email = new Email (VALID_MAIL);
    } catch (NotValidEmailException e) {
        Assert.fail();
    }
    Assert.assertEquals("Email: " + VALID_MAIL + " should be correct created", VALID_MAIL, email.getEmail());
}

@Test(expected = NotValidEmailException.class)
public void shouldThrowExceptionWhenMailHasNoAt() throws NotValidEmailException {
    new Email (INVALID_MAIL_WITHOUT_AT);
}

例如,我有一个用于电子邮件正则表达式验证的基本测试用例。此测试类“EmailTest”的测试覆盖率为 73%。被测类“电子邮件”被 100% 覆盖。

为什么要测量测试用例中的代码覆盖率,这是为了什么?

【问题讨论】:

  • 除非您告诉它不要捕获测试代码的代码覆盖率,否则它怎么知道不捕获?既然你没有,它就会被捕获。
  • 是的,你是对的。测试包可以从 Code Coverage Measure Analysis Scope 中排除。
  • 然后写一个包含该内容的自我答案或考虑删除问题。在小评论中保留直接答案的问题是没有意义的。

标签: java junit code-coverage eclemma


【解决方案1】:

您可以将测试代码排除在覆盖范围之外,但您不应该这样做。覆盖率旨在告诉您有关代码的重要信息。您的测试代码也很重要。例如,您的测试助手中可能有从未运行过的代码:您可以删除该代码。或者您可能不小心编写了由于某种原因从未执行过的测试行。

排除测试代码的唯一原因是,如果您为自己设定了一些任意目标,例如 75% 的覆盖率,并且不想通过包含测试来“作弊”。这些目标没有任何意义,所以不要让它们限制你从报道中发现的东西。

【讨论】:

    【解决方案2】:

    测试包可以从 Code Coverage Measure Analysis Scope 中排除。

    Coverage As -> Coverage Configurations -> Coverage -> 分析范围

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      相关资源
      最近更新 更多