Как бы вы лаконично заявили о равенстве Collection
элементов, в частности a Set
в JUnit 4?
java
unit-testing
collections
junit
Eqbal
источник
источник
Ответы:
Вы можете утверждать, что два
Set
s равны друг другу, что вызываетSet
equals()
метод .Это
@Test
пройдет, если дваSet
элемента имеют одинаковый размер и содержат одинаковые элементы.источник
equals
иhashCode
реализован ли класс, который вы храните в своей Hashtable?Apache снова приходит на помощь.
Работает как шарм. Не знаю почему, но я обнаружил, что с коллекциями
assertEquals(coll1, coll2)
не всегда работает следующее. В случае, если это не удалось для меня, у меня было две коллекции, поддерживаемые Sets. Ни хамкрест, ни юнит не сказали бы, что коллекции были равны, хотя я точно знал, что они равны. Используя CollectionUtils, он отлично работает.источник
с окорочком :
с простым утверждением:
Примечание: Метод т равенства () из множества бетона класса используется
источник
Особенно интересен случай, когда вы сравниваете
и
Пока что единственное решение, которое я вижу, - это заменить их оба наборами
Или я мог бы сравнить их элемент за элементом.
источник
В качестве дополнительного метода, основанного на массиве ... вы можете рассмотреть возможность использования утверждений неупорядоченного массива в junitx. Хотя пример Apache CollectionUtils будет работать, там также есть набор надежных расширений утверждений:
Я думаю, что
подход будет гораздо более читаемым и отлаживаемым для вас (все коллекции поддерживают toArray (), поэтому использование методов ArrayAssert должно быть достаточно простым.
Конечно, недостатком здесь является то, что junitx - это дополнительный файл jar или запись maven ...
источник
Проверьте эту статью . Один пример оттуда:
источник
Использование Hamcrest:
Это также работает, когда наборы имеют разные типы данных, и сообщает о различиях, а не просто об ошибках.
источник
Если вы хотите проверить, содержит ли List или Set набор определенных значений (вместо сравнения его с уже существующей коллекцией), часто бывает удобен метод toString коллекций:
Это немного короче, чем первое построение ожидаемой коллекции и сравнение ее с фактической коллекцией, и ее проще написать и исправить.
(Следует признать, что это не особо чистый метод, и он не может отличить элемент «foo, bar» от двух элементов «foo» и «bar». Но на практике я думаю, что наиболее важным является то, что писать тесты легко и быстро. , иначе многие разработчики просто не будут без давления.)
источник
Мне нравится решение Ханса-Петера Штёрра ... Но я считаю, что оно не совсем правильное. К сожалению
containsInAnyOrder
, не приемлет ниCollection
одного объекта для сравнения. Так что это должно бытьCollection
изMatcher
s:Импорт:
источник