Java Hamcrest Matcher检查列表是否包含另一个列表



我想比较一个列表是否是另一个列表的子列表

假设我有以下列表

List<String> checkList = Arrays.asList("a", "d");
List<String> actualList = Arrays.asList("a", "b", "c", "d");

我想检查actualList是否包含checkList。我可以迭代每个值并进行比较。但是有没有汉克雷斯特的匹配者能胜任的工作

例如

ad应通过

abc应通过

但是ae应该不能通过

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));

checkList的顺序并不重要。

如果你交换checkListactualList的角色,你也可以写:

assertThat(checkList, everyItem(isIn(actualList)));

这可能比更可读

assertTrue(actualList.stream().allMatch(checkList::contains));

最新更新