Чем различаются hasItems, содержит и содержит InAnyOrder Hamcrest?

Hamcrest предоставляет несколько средств сопоставления для утверждения содержимого коллекции. Все эти случаи проходят:

Collection<String> c = ImmutableList.of("one", "two", "three");
assertThat(c, hasItems("one", "two", "three");
assertThat(c, contains("one", "two", "three");
assertThat(c, containsInAnyOrder("one", "two", "three");

Как hasItems, contains а также containsInAnyOrder отличаются?

1 ответ

Решение

hasItems проверяет:

последовательные проходы по проверенной итерируемой доходности хотя бы одного предмета, равного соответствующему предмету из указанного items,

То есть он гарантирует, что коллекции содержат по крайней мере эти элементы в любом порядке. Так,

assertThat(c, hasItems("one", "two"));

также пройдет, при этом дополнительный элемент игнорируется. А также:

assertThat(c, hasItems("three", "two", "one"));

также пройдет.

contains проверяет:

один проход по обследованному Iterable возвращает серию элементов, каждый из которых логически равен соответствующему элементу в указанных элементах. Для положительного совпадения проверяемая итерация должна иметь ту же длину, что и количество указанных элементов.

Поэтому он гарантирует, что коллекция содержит именно эти элементы:

assertThat(c, contains("one", "two")); // Fails

Это потерпит неудачу, как остаток "three" не соответствует.

assertThat(c, contains("three", "two", "one")); // Fails

Это не удается, потому что соответствующие элементы не совпадают.

Другой связанный матч, containsInAnyOrder проверяет наличие именно этих элементов, но в любом порядке:

Создает порядок сопоставления заказов для Iterables совпадает, когда один проход Iterable возвращает серию элементов, каждый из которых логически равен одному элементу в любом месте указанных элементов.

Тест с отсутствующим элементом не пройден:

assertThat(c, containsInAnyOrder("one", "two")); // Fails

Но все предметы в другом порядке пройдут:

assertThat(c, containsInAnyOrder("three", "two", "one"));
Другие вопросы по тегам