一尘不染

如何对hashCode()进行单元测试?

java

如何在单元测试中测试 hashCode()函数?

public int hashCode(){
    int result = 17 + hashDouble(re);
    result = 31 * result + hashDouble(im);
    return result;
}

阅读 294

收藏
2020-12-03

共1个答案

一尘不染

每当我覆盖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());
}
2020-12-03