【发布时间】:2021-04-03 18:30:45
【问题描述】:
我尝试使用Assert#assertThat 检查列表列表中的每个列表是否包含特定值。
我已经编写了这段代码,但它不起作用。 测试未编译,代码带有红线下划线并显示错误消息(查看注释):
List<List<String>> testedList = new ArrayList<>();
List<String> firstList = new ArrayList<>();
firstList.add("1");
firstList.add("2");
List<String> secondList = new ArrayList<>();
secondList.add("2");
secondList.add("3");
testedList.add(firstList);
testedList.add(secondList);
Assert.assertThat(testedList, CoreMatchers.everyItem(CoreMatchers.hasItem("2")));
// Required type Provided
// actual: T List<java.util.List<java.lang.String>>
// matcher: Matcher<? super T> Matcher<Iterable<Iterable<? super String>>>
即使是显式类型:
Assert.assertThat(testedList, CoreMatchers.<List<String>>everyItem(CoreMatchers.<String>hasItem("2")));
// Required type: Matcher<List<String>>
// Provided: Matcher<Iterable<? super String>>
如果它只是字符串列表,我可以检查每个字符串是否包含这样的特定字母:
List<String> testedList = new ArrayList<>();
testedList.add("1a");
testedList.add("2a");
Assert.assertThat(testedList, CoreMatchers.everyItem(CoreMatchers.containsString("a")));
那么我的代码有什么问题? 我该如何解决?
进口:
import org.hamcrest.CoreMatchers;
import org.junit.Assert;
import org.junit.Test;
import java.util.List;
import java.util.ArrayList;
Gradle 依赖项:
testCompile group: 'junit', name: 'junit', version: '4.12'
【问题讨论】:
-
它不起作用是什么意思?第一个断言对我来说运行正常
-
对我来说,它显示了我在评论中描述的错误消息
-
错误是否发生在方法“everyItem”上?
-
@PabloB 它没有被编译。所有 Assert#assertThat 内容都会显示错误消息。
标签: java junit4 assert matcher hamcrest