gpt4 book ai didi

java - 自动检查equals、hashCode和compareTo一致性的技术?

转载 作者:IT老高 更新时间:2023-10-28 21:01:21 25 4
gpt4 key购买 nike

我很清楚契约(Contract)需要确保 hashCodeequals 一致,并且 equals 一致>比较。但是,这是 often violated in practice .是否有任何工具、技术或库可以自动测试这种一致性?

不幸的是,我怀疑答案是否定的,但如果能够对这种可以利用库调用或框架的东西进行单元测试而不需要编写自定义测试,那将很有用在重要的情况下手动处理。

如果不清楚我所说的一致性是什么意思,对于 hashCodeequals 我指的是以下内容:

If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.

对于 equalscompareTo 我引用以下:

The natural ordering for a class C is said to be consistent with equals if and only if e1.compareTo(e2) == 0 has the same boolean value as e1.equals(e2) for every e1 and e2 of class C.

最佳答案

Guava's测试有一个名为 EqualsTester 的实用程序我们将其用作单元测试的日常部分来测试 equalshashCode。它的用途看起来像

new EqualsTester()
.addEqualityGroup("hello", "h" + "ello")
.addEqualityGroup("world", "wor" + "ld")
.addEqualityGroup(2, 1 + 1)
.testEquals();

它测试同一组中的所有值是否相等并具有相同的哈希码,不同组相等,以及其他各种不变量都满足。你可以自己使用它,或者只是借用它的想法。

如果可以在不生成或明确指定测试值的情况下进行测试,我会感到非常惊讶,因为这似乎非常很可能等同于停机问题。

关于java - 自动检查equals、hashCode和compareTo一致性的技术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9624043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com