假设我有一个没有 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);
这给了我一个完整的等式图片,但是很笨重(我甚至没有考虑可能的空问题)。第三个选项是使用 Compaator,但 compareTo ()不会告诉我哪些字段的相等性失败。
有没有一种更好的做法来从对象中得到我想要的东西,而不需要子类化和重写 equals (ugh) ?