2016-12-13 4 views
1

Когда я запускаю следующий тест JUnit:«не подходящий метод не найден» при использовании hasItem Hamcrest Искателя

@Test 
public void test(){ 
    List<Map<String,String>> data=new ArrayList<>(); 
    Map<String,String> map=new HashMap<>(); 
    map.put("x","y"); 
    data.add(map); 

    assertThat(data, hasItem(hasKey("x"))); 
} 

я получаю это:

 
Error:(239, 9) java: no suitable method found for assertThat(java.util.List>,org.hamcrest.Matcher>>) 
    method org.junit.Assert.assertThat(java.lang.String,T,org.hamcrest.Matcher) is not applicable 
     (cannot infer type-variable(s) T 
     (actual and formal argument lists differ in length)) 
    method org.junit.Assert.assertThat(T,org.hamcrest.Matcher) is not applicable 
     (inferred type does not conform to upper bound(s) 
     inferred: java.util.List> 
     upper bound(s): java.lang.Iterable>,java.lang.Object) 

Похоже, что-то в дженериков разваливается , Что это?

ответ

0

javac не знает, как вывести общий тип для некоторых из этих методов.

assertThat ожидает значения и Matcher этого типа. Вы должны быть явными

Assert.assertThat(data, Matchers.<Map<String, String>> hasItem(Matchers.hasKey("x"))); 

Хотя это должно работать без явного аргумента типа в Java 8.

Смежные вопросы