hasItems checks:
连续通过检查的 Iterable 产生至少一项与指定 items 中的对应项相等的项。
也就是说,它确保集合至少包含这些项目,以任何顺序。所以,
assertThat(c, hasItems("one", "two"));
也会通过,忽略多余的项目。并且:
assertThat(c, hasItems("three", "two", "one"));
也会通过。
contains checks:
对检查过的Iterable 进行一次遍历会产生一系列项目,每个项目在逻辑上等于指定项目中的相应项目。对于正匹配,检查的可迭代对象的长度必须与指定项的数量相同。
所以它确保集合准确地包含这些项目:
assertThat(c, contains("one", "two")); // Fails
这会失败,因为剩余的 "three" 不匹配。
assertThat(c, contains("three", "two", "one")); // Fails
这会失败,因为对应的项目不匹配。
另一个相关的匹配器,containsInAnyOrder,checks,这些项目确实存在,但顺序不限:
为Iterables 创建一个与顺序无关的匹配器,当通过检查的Iterable 产生一系列项目时匹配,每个项目在逻辑上等于指定项目中任意位置的一个项目。
缺少项目的测试失败:
assertThat(c, containsInAnyOrder("one", "two")); // Fails
但是顺序不同的所有项目都会通过:
assertThat(c, containsInAnyOrder("three", "two", "one"));