Cobertura,压制线永远不应该来

时间:2011-05-14 16:07:24

标签: java code-coverage cobertura

我第一次使用cobertura。一切正常,但我想知道的是, 我的代码中有一些行,永远不应该被称为:

try {
    em.persist();
}catch(Exception) {
    logger.error("can not create");
}

我正在执行所有控制,直到持续行,当我的代码正常工作时,永远不会达到错误行,现在就是这样。因此我从来没有%100线覆盖。

我应该以某种方式抑制它?

谢谢Bilal

3 个答案:

答案 0 :(得分:5)

虽然您可以从Cobertura覆盖率报告中排除整个类,但您不能排除特定的行或方法。

您应该接受在现实项目中无法实现100%的覆盖率,因为总会有无法访问的代码或代码,只能通过模拟复杂的条件组合来实现。

正如其他答案所示,您可以通过模拟/存根EntityManager来尝试增加单元测试覆盖率,以便在persist上抛出异常。但这几乎是你可以去的。

答案 1 :(得分:0)

编写一个单元测试,涵盖异常投掷案例。

答案 2 :(得分:0)

我不会说“持久”方法发生的异常不会发生。如果数据库连接参数错误,或者有人使用映射注释并且搞乱了列名,会发生什么?这都会引发异常。捕获和吞咽这可能会导致单元测试在异常失败时成功。