【问题标题】:Java Code Coverage Ideas?Java 代码覆盖率的想法?
【发布时间】:2011-12-17 09:21:46
【问题描述】:

我正在开发一个 Java 项目,其中我有一个 ant 构建,它运行由 Cobertura 监控的 JUnit 测试。效果很好,我们的覆盖率一直很高。对于某些类,例如 Hibernate 实体,我们在其中包含最少的代码,但具有 equals 和 hashCode 方法。测试这些是一个巨大的痛苦,并且会降低覆盖率。我们已经尝试使用EqualsVerifier 两个类相互引用,这在 Hibernate 实体中经常发生。

我们曾考虑使用 Commons EqualsBuilder,但后来我们失去了让 IDE 自动生成 equals/hashCode 方法的能力。我知道 EqualsBuilder 也可以通过反射来完成,但我们不想仅仅因为构建时单元测试覆盖而失去运行时性能。

如果我们可以告诉 Cobertura 忽略 equals 和 hashCode 方法,理想的情况是,但是那里的补丁要求我们注释我们的类,这似乎有点尴尬。

所以,我希望从其他人那里得到关于在这种情况下什么效果好的想法。有人对如何完成这项工作有任何想法吗?

谢谢!

【问题讨论】:

    标签: java unit-testing tdd equals cobertura


    【解决方案1】:

    如果不值得测试,那么一开始就可能不值得编写代码。

    换句话说:如果您的 equals 和 hashcode 方法在您的生产代码中的任何地方使用,那么您需要代码覆盖率。就如此容易。否则会导致bug。相信我,它

    顺便说一句,“测试这些是一个巨大的痛苦”绝不应该成为放弃测试的充分理由。巨大的痛苦现在通常转化为巨大的努力,但从长远来看是值得的。

    【讨论】:

      【解决方案2】:

      在我看来,您需要做出决定:equals 和 hashCode 都不重要,在这种情况下,您应该忽略

      【讨论】:

      • 我同意所有代码都应该被测试。精神斗争是那些测试的手动编码。在这种情况下,equals方法是自动生成的并且是正确的。因此,测试是对所使用算法的测试。涉及的分支数量非常多,因此测试将是一系列将事物设置为某个对象或 null 以覆盖每个分支的每一侧的组合。也许最终最适合我的事情是向 EqualsVerifier 提交一个补丁,以允许类相互引用。
      • 它们在创建时是“正确的”,但是在有人向对象添加另一个成员变量之后它们是正确的吗?那将是我担心的事情。
      猜你喜欢
      • 2012-06-30
      • 2013-06-04
      • 1970-01-01
      • 2012-02-28
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      相关资源
      最近更新 更多