[英]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 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));
checkList 的順序並不重要。
如果你交換checkList
和actualList
的角色,你也可以這樣寫:
assertThat(checkList, everyItem(isIn(actualList)));
這可能比以下更具可讀性:
assertTrue(actualList.stream().allMatch(checkList::contains));
您還可以使用List::containsAll
方法:
assertTrue(actualList.containsAll(checkList));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.