假设我有一个没有equals()方法的类,而我没有源代码。我想要比较该类的两个实例是否相等。
我可以进行多次断言:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
我不喜欢这个解决方案,因为如果早期断言失败,我就无法获得完整的等式图片。
我可以手动比较并跟踪结果:
String errorStr = "";
if(!obj1.getFieldA().equals(obj2.getFieldA())) {
errorStr += "expected: " + obj1.getFieldA() + ", actual: " + obj2.getFieldA() + "\n";
}
if(!obj1.getFieldB().equals(obj2.getFieldB())) {
errorStr += "expected: " + obj1.getFieldB() + ", actual: " + obj2.getFieldB() + "\n";
}
...
assertEquals("", errorStr);
这给了我完整的相等性图像,但很笨重(我甚至还没有考虑可能的空值问题)。第三个选项是使用Comparator,但compareTo()不会告诉我哪些字段未通过相等性检查。
有没有更好的做法来从对象中获取我想要的内容,而不用子类化和覆盖equals(呃)?
equal
方法的实现只会告诉我们这两个实例是否相等,我们并不关心它们为什么不相等。 - Bhesh GurungObject
都有一个equals
方法,你可能意味着没有重写equals
方法。 - Steve Kuo