Мне просто интересно, как люди unit test и утверждают, что "ожидаемая" коллекция такая же/подобная, что и "фактическая" коллекция (порядок не важен).
Чтобы выполнить это утверждение, я написал свой простой API утверждения: -
public void assertCollection(Collection<?> expectedCollection, Collection<?> actualCollection) {
assertNotNull(expectedCollection);
assertNotNull(actualCollection);
assertEquals(expectedCollection.size(), actualCollection.size());
assertTrue(expectedCollection.containsAll(actualCollection));
assertTrue(actualCollection.containsAll(expectedCollection));
}
Ну, это работает. Это довольно просто, если я утверждаю, что это просто набор целых чисел или строк. Это также может быть довольно болезненно, если я пытаюсь утвердить коллекцию доменов Hibernate, например, например. Коллекция .containsAll(..) полагается на equals (..) для выполнения проверки, но я всегда переопределяю equals (..) в своих доменах Hibernate, чтобы проверять только бизнес-ключи (что является наилучшей практикой, изложенной в Hibernate), а не во всех областях этого домена. Конечно, имеет смысл проверять только бизнес-ключи, но есть моменты, когда я действительно хочу убедиться, что все поля верны, а не только бизнес-ключи (например, новая запись ввода данных). Итак, в этом случае я не могу обходиться с domain.equals(..), и мне кажется, что мне нужно реализовать некоторые компараторы только для целей тестирования единицы, а не полагаться на collection.containsAll(..).
Есть ли некоторые библиотеки тестирования, которые я мог бы использовать здесь? Как вы тестируете свою коллекцию?
Спасибо.