我正在开发一个Java项目,我有一个ant build,它运行JUnit测试,由Cobertura监控。这很有效,我们的报道非常高。对于某些类,比如Hibernate实体,我们在其中只有最少的代码,但是有equals和hashCode方法。测试这些是一个巨大的痛苦,并拖累覆盖率百分比。我们已经尝试使用EqualsVerifier两个类相互引用,这些类经常出现在Hibernate实体中。
我们考虑过使用Commons EqualsBuilder,但是我们失去了让IDE自动生成equals / hashCode方法的能力。我知道EqualsBuilder也可以通过反射完成,但我们不希望仅为构建时单元测试覆盖率而失去运行时性能。
理想的情况是,如果我们可以告诉Cobertura只是忽略equals和hashCode方法,但那里的补丁要求我们注释我们的类,这看起来有点尴尬。
所以,我希望其他人能够在这种情况下运作良好的想法。有没有人对如何完成这项工作有任何想法?
谢谢!
答案 0 :(得分:5)
在我看来,你需要做出决定:equals和hashCode都不重要,在那种情况下你应该忽略< 100%代码覆盖率指标(或弄清楚如何忽略方法)。或者它们很重要,你应该编写单元测试来练习它们。它可能不是很有趣,但听起来你关心这些方法是否正常工作。在这种情况下,您可能需要测试它们。
答案 1 :(得分:1)
如果不值得测试,那么首先编写代码可能不值得。
换句话说:如果您的生产代码中的任何地方都使用了equals和hashcode方法,那么您需要代码覆盖率。就如此容易。否则会导致错误。相信我,它将。
顺便说一下,“测试那些是一个巨大的痛苦”绝不应该成为放弃测试的理由。巨大的痛苦现在通常意味着巨大的努力,但从长远来看是值得的。