相关疑难解决方法(0)

一个单元应该如何测试hashCode-equals合约?

简而言之,hashCode契约,根据Java的object.hashCode():

  1. 除非影响equals()的内容发生变化,否则哈希码不应更改
  2. equals()表示哈希码是==

让我们主要关注不可变数据对象 - 它们的信息在构造之后永远不会改变,因此假定#1成立.留下#2:问题只是确认等于隐含代码==.

显然,我们无法测试每个可想到的数据对象,除非该集合很小.那么,编写可能会遇到常见情况的单元测试的最佳方法是什么?

由于此类的实例是不可变的,因此构造此类对象的方法有限; 如果可能的话,这个单元测试应该涵盖所有这些.在我的脑海中,入口点是构造函数,反序列化和子类的构造函数(应该可以简化为构造函数调用问题).

[我打算通过研究来回答我自己的问题.来自其他StackOverflowers的输入是这个过程的一个受欢迎的安全机制.]

[这可能适用于其他OO语言,所以我添加了该标签.]

java oop unit-testing

72
推荐指数
3
解决办法
4万
查看次数

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

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

public int hashCode(){
    int result = 17 + hashDouble(re);
    result = 31 * result + hashDouble(im);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

java junit unit-testing hashcode

35
推荐指数
2
解决办法
3万
查看次数

自动检查equals,hashCode和compareTo的一致性的技巧?

我很清楚的合同需求,确保hashCode与一致equals,并且equals与一致compareTo.但是,这在实践中经常被违反.是否有可以自动测试此一致性的工具,技术或库?

我怀疑不幸的是答案是"不",但能够对这种可以利用库调用或框架的东西进行单元测试而不是需要手动编写自定义测试是有用的.每个重要的案例.

如果目前还不清楚我所说的一致意思是,hashCodeequals我指的是以下几点:

如果两个对象根据equals(Object)方法相等,则对两个对象中的每一个调用hashCode方法必须生成相同的整数结果.

对于equalscompareTo我指的是以下几点:

当且仅当e1.compareTo(e2)== 0具有与c的每个e1和e2的e1.equals(e2)相同的布尔值时,C类的自然排序被认为与equals一致.

java unit-testing equals hashcode compareto

19
推荐指数
2
解决办法
2487
查看次数

标签 统计

java ×3

unit-testing ×3

hashcode ×2

compareto ×1

equals ×1

junit ×1

oop ×1