Java Hamcrest Matcher 检查列表是否包含另一个列表
Java Hamcrest Matcher check if list contains another list
我想比较一个列表是否是另一个列表的子列表
假设我有以下列表
List<String> checkList = Arrays.asList("a", "d");
List<String> actualList = Arrays.asList("a", "b", "c", "d");
我想检查 actualList
是否包含 checkList
。我可以迭代每个值并进行比较。但是有没有任何 hamcrest 匹配器可以完成这项工作
例如。
a
,d
应该通过
a
,b
,c
应该通过
但是a
,e
应该会失败
hasItems
支持单独传递字符串,contains
正在检查所有值,in
支持一个项目出现在列表中。但我想要
assertThat(actualList,containsList(checkList))
是否有可用的内置匹配器,或者我是否需要编写自定义匹配器?
hasItems
接受可变参数,因此您可以将列表转换为数组并传递它(或者,只需将其声明为数组开始):
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));
清单的顺序并不重要。
如果你交换checkList
和actualList
的角色,你还可以这样写:
assertThat(checkList, everyItem(isIn(actualList)));
这可能比:
更具可读性
assertTrue(actualList.stream().allMatch(checkList::contains));
我想比较一个列表是否是另一个列表的子列表
假设我有以下列表
List<String> checkList = Arrays.asList("a", "d");
List<String> actualList = Arrays.asList("a", "b", "c", "d");
我想检查 actualList
是否包含 checkList
。我可以迭代每个值并进行比较。但是有没有任何 hamcrest 匹配器可以完成这项工作
例如。
a
,d
应该通过
a
,b
,c
应该通过
但是a
,e
应该会失败
hasItems
支持单独传递字符串,contains
正在检查所有值,in
支持一个项目出现在列表中。但我想要
assertThat(actualList,containsList(checkList))
是否有可用的内置匹配器,或者我是否需要编写自定义匹配器?
hasItems
接受可变参数,因此您可以将列表转换为数组并传递它(或者,只需将其声明为数组开始):
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));
清单的顺序并不重要。
如果你交换checkList
和actualList
的角色,你还可以这样写:
assertThat(checkList, everyItem(isIn(actualList)));
这可能比:
更具可读性assertTrue(actualList.stream().allMatch(checkList::contains));