Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用hamcrest contains比较两个列表?_Java_Junit_Hamcrest - Fatal编程技术网

Java 如何使用hamcrest contains比较两个列表?

Java 如何使用hamcrest contains比较两个列表?,java,junit,hamcrest,Java,Junit,Hamcrest,为什么这个测试失败了?我知道当你传入由逗号分隔的单个字符串时,contains会起作用,但我想看看是否可以只传入整个字符串列表。我只想确保列表1包含列表2的所有内容 @Test public void testContains() { String expected1 = "hello"; String expected2 = "goodbye"; List<String> expectedStrings = new ArrayList<>();

为什么这个测试失败了?我知道当你传入由逗号分隔的单个字符串时,contains会起作用,但我想看看是否可以只传入整个字符串列表。我只想确保列表1包含列表2的所有内容

@Test
public void testContains() {
    String expected1 = "hello";
    String expected2 = "goodbye";
    List<String> expectedStrings = new ArrayList<>();
    expectedStrings.add(expected1);
    expectedStrings.add(expected2);
    List<String> actualStrings = new ArrayList<>();
    actualStrings.add(expected1);
    actualStrings.add(expected2);
    assertThat(actualStrings, contains(expectedStrings));
}

没有重载的
contains
方法获取期望值列表

在语句
assertThat(actualStrings,contains(expectedStrings))
调用以下方法(在
匹配器
类中):

<E> org.hamcrest.Matcher<java.lang.Iterable<? extends E>> contains(E... items)

要使断言生效,必须将列表转换为数组:

assertThat(actualStrings, contains(expectedStrings.toArray()));

如果要为列表中的每个项目应用匹配器,可以使用
everyItem
匹配器,如下所示:

everyItem(not(isEmptyOrNullString()))

containsAll而不是contains。选中@RahulSharma,这样你就可以像使用
assertThat(actualStrings.containsAll(expectedStrings),is(true))
?@RahulSharma如果有一个类似列表方法
containsAll
的hamcrest匹配器,那么我可以这样做:
assertThat(actualStrings,containsAll(expectedStrings))
。我认为它比
is(true)
matcher读起来更好。我真的不知道用hamcrest怎么做。我在测试中使用JUnit断言。JUnit具有大部分hamcrest功能,如果在您的案例中不强制使用hamcrest,我建议您使用JUnit。@RahulSharma好的,那么在这种情况下,JUnit断言是什么样子的?
assertThat(actualStrings, contains(expectedStrings.toArray()));
everyItem(not(isEmptyOrNullString()))