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");
Run Code Online (Sandbox Code Playgroud)
如何hasItems
,contains
以及containsInAnyOrder
有什么不同?
Joe*_*Joe 65
连续遍历检查的Iterable yield至少一个项目,该项目等于指定的相应项目
items
.
也就是说,它确保集合包含任何顺序的至少这些项目.所以,
assertThat(c, hasItems("one", "two"));
Run Code Online (Sandbox Code Playgroud)
也会通过,额外的项目被忽略.和:
assertThat(c, hasItems("three", "two", "one"));
Run Code Online (Sandbox Code Playgroud)
也会通过.
对检查的单次传递
Iterable
产生一系列项目,每个项目在逻辑上等于指定项目中的相应项目.对于肯定匹配,检查的iterable必须与指定项的数量具有相同的长度.
因此,它可以确保集合包含正是这些项目:
assertThat(c, contains("one", "two")); // Fails
Run Code Online (Sandbox Code Playgroud)
这将失败,因为剩余"three"
的不匹配.
assertThat(c, contains("three", "two", "one")); // Fails
Run Code Online (Sandbox Code Playgroud)
这会失败,因为相应的项目不匹配.
另一个相关的匹配,containsInAnyOrder
,检查恰好这些项目都存在,但在任何顺序:
Iterables
当一次检查Iterable
产生一系列项目时,为该匹配创建一个与订单无关的匹配器,每个项目在逻辑上等于指定项目中任何位置的一个项目.
缺少项目的测试失败:
assertThat(c, containsInAnyOrder("one", "two")); // Fails
Run Code Online (Sandbox Code Playgroud)
但是,不同顺序的所有项目都将通过:
assertThat(c, containsInAnyOrder("three", "two", "one"));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32447 次 |
最近记录: |