【发布时间】:2015-12-09 01:46:07
【问题描述】:
我正在尝试在 Hamcrest 的 everyItem() 上使用 hasKey(),但出现以下编译错误:
error: no suitable method found for assertThat(List<Map<String,Object>>,Matcher<Iterable<Map<? extends String,?>>>)
assertThat(data, everyItem(hasKey("index")));
^
method Assert.<T#1>assertThat(T#1,Matcher<? super T#1>) is not applicable
(actual argument Matcher<Iterable<Map<? extends String,?>>> cannot be converted to Matcher<? super List<Map<String,Object>>> by method invocation conversion)
method Assert.<T#2>assertThat(String,T#2,Matcher<? super T#2>) is not applicable
(cannot instantiate from arguments because actual and formal argument lists differ in length)
where T#1,T#2 are type-variables:
T#1 extends Object declared in method <T#1>assertThat(T#1,Matcher<? super T#1>)
T#2 extends Object declared in method <T#2>assertThat(String,T#2,Matcher<? super T#2>)
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
这是一个简单的 JUnit 测试,它重新创建了错误:
package test;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.hamcrest.collection.IsMapContaining.hasKey;
import static org.hamcrest.core.Every.everyItem;
import static org.junit.Assert.assertThat;
public class Test {
@Test
public void test(){
List<Map<String, Object>> data = new ArrayList<>();
Map<String,Object> element = new HashMap<>();
element.put("index", 1);
data.add(element);
assertThat(data, everyItem(hasKey("index")));
}
}
- Java 1.7
- Hamcrest 1.3
- JUnit 4.11
有谁知道如何解决这个编译错误?
【问题讨论】:
-
请也列出您的导入语句。
-
(手头没有环境)为
data添加演员表有效吗?即assertThat((Iterable<Map<String,Object>>)data, everyItem(hasKey("index")));
标签: java generics junit hamcrest