繁体   English   中英

JUnit断言:检查Object是否等于String

[英]JUnit assertThat: check that Object equals String

我将Map声明如下:

Map<String, Object> data

我在其中放入一个String并验证其值如下:

assertEquals("value", data.get("key"));

现在,我想重写验证以使用assertThat而不是assertEquals 我尝试过以下方法:

assertThat(data.get("key"), equalTo("value"));

当然,由于类型不匹配,它不起作用:

Wrong 2nd argument type. Found: 'org.hamcrest.Matcher<java.lang.String>', required: 'org.hamcrest.Matcher<? super java.lang.Object>' less...

String的第一个参数的显式类型转换有帮助,但我想避免它。 例如, assertEquals不需要类型转换。 那么,我如何使用assertThat方法检查上面声明的Map对象中的值是否等于特定的String

“更多断言”的做事方式是:

Map<String, Object> expectedData = Collections.singletonMap("key", "value");

asssertThat(data, is(expectedData));

请注意:

  • 也许你需要类型提示来调用singletonMap
  • 除了匹配,还有其他的匹配,将允许你检查数据包含你的“预期”的地图数据

对于你的具体问题:这是因为泛型在这里发挥作用; 使用(String) data.get("key") - 告诉编译器“实际”参数是String类型可能就足够了。

最后 - 我不知道你的问题是什么。 我写下这段代码:

public void test() {
    Map<String, Object> data = new HashMap<>();
    data.put("key", "value");
    assertThat(data.get("key"), is("value"));

    Map<String, Object> expectedData = Collections.singletonMap("key", "value");
    assertThat(data, is(expectedData));
}

编译很好,单元测试运行并通过。 换句话说:实际上我无法重现你的问题。

试试这个

assertThat(data.get("key"), equalTo("value"))

要么

    assertThat(data.get("key"), CoreMatchers.equalTo("value"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM