如何在单元测试中测试 hashCode()函数?
public int hashCode(){ int result = 17 + hashDouble(re); result = 31 * result + hashDouble(im); return result; }
每当我覆盖equals和hash代码时,我都会按照Joshua Bloch在“ Effective Java”第3章中的建议编写单元测试。我确保equals和hash代码是自反的,对称的和可传递的。我还确保“不等于”对所有数据成员均正常工作。
当我检查对equals的调用时,我还要确保hashCode的行为符合预期。像这样:
@Test public void testEquals_Symmetric() { Person x = new Person("Foo Bar"); // equals and hashCode check name field value Person y = new Person("Foo Bar"); Assert.assertTrue(x.equals(y) && y.equals(x)); Assert.assertTrue(x.hashCode() == y.hashCode()); }