为什么这个测试失败了?我知道当你传入用逗号分隔的单个字符串时,包含有效,但我想看看是否可以传入整个字符串列表。我只想确保列表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));
答案 0 :(得分:2)
没有重载的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()));
答案 1 :(得分:0)
如果要为列表中的每个项目应用匹配器,可以使用everyItem
匹配器,如下所示:
everyItem(not(isEmptyOrNullString()))