【问题标题】:"no suitable method found" when using hasItem Hamcrest Matcher使用 hasItem Hamcrest Matcher 时“找不到合适的方法”
【发布时间】:2017-04-28 22:17:51
【问题描述】:

当我运行以下 jUnit 测试时:

@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")));
}

我明白了:

错误:(239, 9) java: 没有找到适合 assertThat(java.util.List>,org.hamcrest.Matcher>>) 的方法 方法 org.junit.Assert.assertThat(java.lang.String,T,org.hamcrest.Matcher) 不适用 (无法推断类型变量 T (实际参数列表和形式参数列表的长度不同)) 方法 org.junit.Assert.assertThat(T,org.hamcrest.Matcher) 不适用 (推断类型不符合上限) 推断:java.util.List> 上限:java.lang.Iterable>,java.lang.Object)

看起来泛型中的某些东西正在崩溃。这是什么?

【问题讨论】:

    标签: java hamcrest


    【解决方案1】:

    javac 不知道如何推断其中一些方法的泛型类型。

    assertThat 需要一个值和一个该类型的 Matcher。你必须是明确的

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

    虽然在 Java 8 中这应该可以在没有显式类型参数的情况下工作。

    【讨论】:

      【解决方案2】:

      我认为他们更新了函数的签名。我发现我使用的是旧语法。

      assertThat(singleParam)

      assertThat(res.getStatus()).isEqualTo(200);
      

      assertThat(actual, expected)

      assertThat(res.getEntity(), is("Testing"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多