Ответ 1
последовательные проходы над рассмотренным Iterable дают по крайней мере один элемент, который равен соответствующему элементу из указанного
items
.
То есть, он гарантирует, что коллекции содержат по крайней мере эти элементы в любом порядке. Таким образом,
assertThat(c, hasItems("one", "two"));
также пройдет, при этом дополнительный элемент будет проигнорирован. А:
assertThat(c, hasItems("three", "two", "one"));
также будет проходить.
один проход по проверенному
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"));