Mad*_*han 3 java hamcrest assertion
我想比较一个列表是否是另一个列表的子列表
假设我有以下列表
List<String> checkList = Arrays.asList("a", "d");
List<String> actualList = Arrays.asList("a", "b", "c", "d");
Run Code Online (Sandbox Code Playgroud)
我想检查是否actualList包含checkList. 我可以迭代每个值并进行比较。但是有没有 hamcrest matcher 可以完成这项工作
对于前。
a,d应该通过
a, b,c应该通过
但是a,e应该会失败
支持hasItems单独传递字符串,并contains检查所有值,in支持列表中存在一个项目。但我想要
assertThat(actualList,containsList(checkList))
是否有可用的内置匹配器或者我需要编写自定义匹配器?
hasItems接受 varargs 参数,因此您可以将列表转换为数组并传递它(或者,只需将其声明为数组即可):
final List<String> checkList = Arrays.asList("a", "d");
// final String[] checkListAsArray = new String[] { "a", "d" };
final String[] checkListAsArray = checkList.toArray(new String[checkList.size()]);
final List<String> actualList = Arrays.asList("a", "b", "c", "d");
assertThat(actualList, Matchers.hasItems(checkListAsArray));
Run Code Online (Sandbox Code Playgroud)
检查列表的顺序并不重要。
checkList如果你交换和的角色actualList,你也可以写:
assertThat(checkList, everyItem(isIn(actualList)));
Run Code Online (Sandbox Code Playgroud)
这可能比以下内容更具可读性:
assertTrue(actualList.stream().allMatch(checkList::contains));
Run Code Online (Sandbox Code Playgroud)