Рекомендации по выбору полей для реализации equals()

При написании юнит-тестов я часто сталкиваюсь с ситуацией, когда equals()для какого-то объекта в тестах -- в assertEquals-- должно работать отличается от того, как это работает в реальных условиях. Возьмем, к примеру, какой-нибудь интерфейс ReportConfig. Он имеет idи несколько других полей. Логически, один конфиг равен другому, когда совпадают их id. Но когда дело доходит до тестирования какой-то конкретной реализации, скажем, XmlReportConfig, очевидно, что я хочу сопоставить всеполя. Одно из решений — не использовать equalsв тестах, а просто перебирать свойства или поля объекта и сравнивать их, но это не кажется хорошим решением.

Итак, помимо этого конкретного типа ситуаций, я хочу разобраться, каковы лучшие практики реализации equals, семантически, а не технически.

15
задан Gray 18 December 2013 в 20:50
поделиться