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