gpt4 book ai didi

java - 如何使用 hamcrest 包含比较 2 个列表?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:15:42 25 4
gpt4 key购买 nike

为什么这个测试失败了?我知道 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));
}

改用这个断言是否可以接受?

assertThat(actualStrings, is(expectedStrings));

最佳答案

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

在声明中assertThat(actualStrings, contains(expectedStrings))调用以下方法(在 Matchers 类中):

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

基本上你是说你期望一个包含一个元素的列表,而这个元素是 expectedStrings但实际上是expected1 ( E 的类型是 List<String> 而不是 String )。要验证,请将以下内容添加到应该会通过的测试中:

List<List<String>> listOfactualStrings = new ArrayList<>();
listOfactualStrings.add(actualStrings);
assertThat(listOfactualStrings, contains(expectedStrings));

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

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

关于java - 如何使用 hamcrest 包含比较 2 个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35995347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com