Я пытаюсь сравнить 2 списка:
assertThat(actual.getList(), is(Matchers.containsInAnyOrder(expectedList)));
Но идея
java: no suitable method found for assertThat(java.util.List<Agent>,org.hamcrest.Matcher<java.lang.Iterable<? extends model.Agents>>)
method org.junit.Assert.<T>assertThat(T,org.hamcrest.Matcher<T>) is not applicable
(no instance(s) of type variable(s) T exist so that argument type org.hamcrest.Matcher<java.lang.Iterable<? extends model.Agents>> conforms to formal parameter type org.hamcrest.Matcher<T>)
method org.junit.Assert.<T>assertThat(java.lang.String,T,org.hamcrest.Matcher<T>) is not applicable
(cannot instantiate from arguments because actual and formal argument lists differ in length)
Как мне это написать?
containsInAnyOrder
требует наличия всех элементов, поэтому первое утверждение не будет выполнено. ПосмотритеhasItems
, хотите ли вы проверить наличие хотя бы этих элементов.actual.getList()
содержит"item1", "item3", "item2"
, тест пройдет, и, возможно, вы захотите убедиться, что он содержит только перечисленные элементы ... В этом случае вы можете использоватьassertThat(actual.getList().size(), equalTo(2));
перед containsInAnyOrder, таким образом вы убедитесь, что оба списка имеют одинаковое содержимое.hasItems
. Дополнительная проверка здесь не требуется. См. Комментарий к Тиму выше, а также Чем отличаются hasItems, contains и containsInAnyOrder в Hamcrest?*expectedList.toTypedArray()
) при передаче массива как varargs!Укороченная версия ответа @Jo без лишних параметров.
источник
Чтобы дополнить ответ @Jo:
Hamcrest предоставляет вам три основных метода сопоставления со списком:
contains
Проверяет соответствие всех элементов в порядке подсчета, если в списке больше или меньше элементов, это не удастсяcontainsInAnyOrder
Проверяет соответствие всех элементов и не имеет значения порядок, если в списке больше или меньше элементов, не удастсяhasItems
Проверяет только указанные объекты, неважно, есть ли в списке большеhasItem
Проверяет только один объект, неважно, есть ли в списке большеВсе они могут получать список объектов и использовать
equals
метод сравнения или могут быть смешаны с другими сопоставителями, такими как упомянутый @borjab:http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matchers.html#contains (E ...) http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matchers.html #containsInAnyOrder (java.util.Collection) http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matchers.html#hasItems (T ...)
источник
С существующими библиотеками Hamcrest (начиная с версии 2.0.0.0) вы вынуждены использовать метод Collection.toArray () в своей коллекции, чтобы использовать containsInAnyOrder Matcher. Гораздо лучше было бы добавить это как отдельный метод в org.hamcrest.Matchers:
На самом деле я закончил тем, что добавил этот метод в свою библиотеку пользовательских тестов и использовал его для повышения читаемости моих тестовых примеров (из-за меньшей многословности).
источник
Убедитесь, что
Object
s в вашем спискеequals()
определены на них. затемработает.
источник
Для списка объектов вам может понадобиться что-то вроде этого:
Используйте containsInAnyOrder, если не хотите проверять порядок объектов.
PS Мы будем очень благодарны за любую помощь, чтобы избежать предупреждения, которое подавляется.
источник
Чтобы сравнить два списка с сохраненным порядком, используйте
источник
actualList
содержит элементы внутриcontains
сопоставителя, который завершится ошибкой, если элементы находятся в другом порядке, и также потерпит неудачу, если он содержит больше элементов или отсутствует один.