【问题标题】:Branches missed in testing JUnit and EclEmma测试 JUnit 和 EclEmma 时遗漏的分支
【发布时间】:2012-03-15 18:13:55
【问题描述】:

我正在使用 EclEmma 来测试我编写的测试类的覆盖率(JUnit 测试)。我已经使用-ea 在 Java 中启用了断言。在运行覆盖测试之后,我使用了 Java 断言(在实际代码中,当然不是测试代码),它说 yx 分支错过了。我怎样才能覆盖所有的分支?有什么我做错了吗?

【问题讨论】:

  • 如果没有断言它工作正常吗?
  • 如果我关闭 Java 断言,所以当我删除 -ea 参数时,我得到的覆盖率要低得多。我的测试类涵盖了除以黄色显示的 Java 断言和我在问题中陈述的消息之外的所有内容。

标签: java unit-testing junit code-coverage


【解决方案1】:

我想您是在问为什么在禁用断言时覆盖率会降低? 发生这种情况是因为编译器为断言插入了新分支。考虑这个例子:

assert x > 0;

编译器会插入大致对应的代码

if (assertions are enabled) {
    if ( ! x > 0 )
        throw new AssertionViolatedException()
    }
}

这会将分支添加到您的代码中,当您关闭断言时,这些分支都不会执行。这会降低您的覆盖率,但这没什么大不了的,因为这是指编译器生成的代码。

【讨论】:

  • 问题是关于何时启用断言。
  • 我的问题是,为什么我的测试代码会丢失分支。如果断言被启用,就会发生这种情况。
  • 好的,请重新表述您的问题,以便我理解。您使用 '-ea- 标志运行测试。发生什么了?然后你在没有'-ea'标志的情况下运行你的测试。会发生什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 2013-03-31
相关资源
最近更新 更多