【发布时间】:2022-01-01 11:42:46
【问题描述】:
TDD 的规则之一是:
Write production code only to pass a failing unit test
Effective Java Item 11(第三版),即java Object.hashCode()的同一个契约:
Always override hashCode when you override equals
如果我们只需要重写 equals 以通过失败的测试并且我们不需要在当前失败的测试中使用集合中的对象并且将来可能会发生这种情况,那么现在该怎么做?
【问题讨论】:
-
首先:这些是“唯一”指南。其次,如果我们编写一个测试来验证
equals(...)是否按预期工作,我们还应该编写一个测试来确保hashCode()满足equals(...)和hashCode()之间的约定。所以这里没有矛盾。 -
但我们根本不需要为当前测试覆盖
hashCode()(现在)。 -
再次:然后我们编写一个测试来验证
equals(...)和hashCode()之间的合约是否成立。根据给出的论点,我们将能够编写一个失败的测试,可以通过覆盖被测单元中的hashCode()来修复它。这使我们能够在给定的约束下覆盖hashCode()。 -
如果你不想覆盖哈希码,你认为你不需要它,那么你就不必。请注意您在代码中留下的陷阱。
-
为什么不使用 Lombok 或类似的东西?节省大量样板代码和测试。