Скажем, у меня есть единичный тест, который хочет сравнить два комплекса для объектов для равенства. Объекты содержат много других глубоко вложенных объектов. Все классы объектов правильно определены equals()
методов.Как проверить равенство графов сложных объектов?
Это не сложно:
@Test
public void objectEquality() {
Object o1 = ...
Object o2 = ...
assertEquals(o1, o2);
}
Проблема, если объекты не равны, все, что вы получите это провал, без указания на то, какая часть графа объекта не совпадают. Отладка этого может быть болезненным и разочаровывающим.
Мой текущий подход, чтобы убедиться, что все реализует toString()
, а затем сравнить равенства, как это:
assertEquals(o1.toString(), o2.toString());
Это делает его легче отследить неудачи тестов, так как Иды как Eclipse, есть специальный визуальный компаратор для отображение различий строк в неудачных тестах. По существу, графы объектов представлены в текстовом виде, поэтому вы можете видеть, где разница. Пока toString()
хорошо написан, он отлично работает.
Это все немного неуклюжие. Иногда вы хотите сконструировать toString() для других целей, например, для ведения журнала, возможно, вы хотите отображать только некоторые из полей объектов, а не все из них, или, может быть, toString() вообще не определено и т. Д.
Я ищу идеи для лучшего способа сравнения сложных графов объектов. Есть предположения?
+1 хорошо, что вы справляетесь с этим. Я хотел бы посмотреть, какие решения нашли другие люди. – KLE