【发布时间】:2020-01-13 19:56:11
【问题描述】:
我有一堂课如下:
public class Data{
int x;
ArrayList<Double> list;
}
现在,我想编写单元测试并将这个类与另一个类进行比较,只是为了检查是否相等。但是,我想留出一些错误空间,以便即使双打 相对于某个 epsilon 很接近,它们也被认为是相等的。现在,如果我重写 equals() 方法,NetBeans 和 Sonar 提示我也重写 hashCode() 方法,这没有任何意义。原因是简单地实现一个 hashCode() 方法为 CLOSE 列表输出相同的哈希码值是不可行的。
我的问题是这样的:
我是否应该继续覆盖 equals() 方法并只覆盖 hashCode() 以通过声纳检查? (hashCode() 的虚拟实现)
或
我是否应该只在我的单元测试中而不是在实际源代码中实现此方法来检查接近度?
【问题讨论】:
-
如果你有一个
Set或Data会发生什么 -
当心:这种方法意味着如果 ````a.equals(b)``` 和
b.equals(c),仍然有可能是!a.equals(c)。也就是说,您刚刚创建了一个不可传递的 equals 版本。 -
要求如果
a.equals(b)则a.hashCode() == b.hashCode(),否则哈希集/映射不起作用。您可以通过(例如)return 1作为您的实现来轻松满足这一点,尽管我并没有声称这是一个很好的哈希算法。但是,如果您从不使用散列集合……!一般来说,我觉得编写糟糕的代码来满足样式检查员在道德上是可憎的,但是这里有一个需要满足的合同。
标签: java unit-testing netbeans sonarqube junit4