一个单元应该如何测试哈希码等于契约?
2022-08-31 12:38:20
简而言之,根据Java的object.hashCode(),hashCode合约:
- 哈希代码不应更改,除非影响 equals() 的内容发生更改
- equals() 表示哈希代码是 ==
让我们假设主要对不可变数据对象感兴趣 - 它们的信息在构建后永远不会改变,所以#1被假定为成立。剩下#2:问题只是确认equals意味着哈希代码==的问题。
显然,我们无法测试每个可以想象的数据对象,除非该集合非常小。那么,编写可能捕获常见情况的单元测试的最佳方法是什么?
由于此类的实例是不可变的,因此构造此类对象的方法有限;如果可能的话,这个单元测试应该涵盖所有这些。在我的头顶上,入口点是子类的构造函数,反序列化和构造函数(这应该可以简化为构造函数调用问题)。
[我将尝试通过研究来回答我自己的问题。来自其他StackOverflowers的输入是此过程的一个受欢迎的安全机制。
[这可能适用于其他OO语言,所以我正在添加该标签。