【问题标题】:Java code coverage tools which support source line exclusions支持源代码行排除的 Java 代码覆盖工具
【发布时间】:2012-11-14 09:55:51
【问题描述】:

我目前使用Clover 来衡量我的Java 代码的代码覆盖率。我依赖的一项功能是能够从覆盖率报告中排除任意代码段:

///CLOVER:OFF because this case is simpler to verify by code read
if (lFile.isFile() &&
    lFile.getName().endsWith(FILE_EXTN) &&
    !lFile.delete())
{
  throw new IOException("delete() failed for: " + lFile);
}
///CLOVER:ON

我发现这种排除可以更轻松地专注于测试有趣的逻辑,同时仍然实现 100% 的代码覆盖率。

是否有其他支持这种细粒度排除的 Java 代码覆盖工具(免费或付费)?整个类或整个方法的排除还不够好。

注意:我目前正在研究添加适合 JaCoCo (Issue #14) 的内容。

【问题讨论】:

  • EMMA 未来可能会增加类似的支持;参看。 emma.sourceforge.net/faq.html “未来版本正在考虑允许 EMMA 用户将任意方法标记为排除在覆盖范围之外的功能。”
  • 不幸的是,这似乎不太可能,因为最新的 EMMA 版本是 2005 年发布的。不过,感谢您提供的链接。
  • 不明白为什么关闭。这个问题是可以客观回答的。
  • 我不知道任何副手。 JaCoCo 在运行时使用字节码检测,因此使用源代码 cmets 来控制它将是一个重大变化,这也是为什么 JaCoCo 问题 #14 更有可能使用注释来实现。也就是说,从哲学上讲,我不鼓励您提倡的做法,因为它强调“100%”的覆盖率,而事实上,坦率地说,这个数字纯粹是虚构的。在某些合法的情况下,即使通过测试(例如 assert 语句的错误分支),代码 应该无法访问,但我强烈希望通过 测试来涵盖“无趣”的逻辑 它。
  • 只是出于兴趣,您为什么要排除某些内容?只需将您的限制降低到 80% 或任何有用的值。排除某事也可能导致排除重要部分。你可能有一个你认为不重要的部分并且会包括它,但你的一个同事的想法正好相反。

标签: java code-coverage


【解决方案1】:

【讨论】:

    【解决方案2】:

    根据我的经验,以下都运行良好:

    • 就闭源而言:Clover
    • 在开源方面:Cobetura(但不适用于 Java 7)、EMMA

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多