假設我有一個單元測試,想比較兩個複雜的對象是否相等。這些對象包含許多其他深度嵌套的對象。所有對象的類都已正確定義equals()
方法。如何測試複雜對象圖的相等性?
這並不難:
@Test
public void objectEquality() {
Object o1 = ...
Object o2 = ...
assertEquals(o1, o2);
}
麻煩的是,如果對象是不相等的,你得到的是一個失敗,沒有指出哪個對象圖的一部分不匹配。調試這可能是痛苦和令人沮喪的。
我目前的做法是,以確保一切實現toString()
,然後比較像這種平等:
assertEquals(o1.toString(), o2.toString());
這使得它更容易追查測試失敗,因爲像Eclipse IDE中有一個特殊的視覺比較在失敗測試中顯示字符串差異。本質上,對象圖表是用文本表示的,所以你可以看到差異在哪裏。只要toString()
寫得很好,它的效果很好。
雖然這一切都有點笨拙。有時你想爲其他目的設計toString(),比如記錄,也許你只想渲染一些對象字段而不是所有的對象,或者可能根本沒有定義toString()等等。
我正在尋找比較複雜對象圖的更好方法的想法。有什麼想法嗎?
+1好你brough了。我想看看其他人找到的解決方案。 – KLE 2009-09-11 15:56:36