java - JUnit 断言 : check that Object equals String

标签 java android junit assertions

我有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不需要类型转换。 那么,我如何检查放入 Map 的值?上面声明的对象等于特定的 String , 使用 assertThat方法?

最佳答案

“更 assertThat”的做事方式是:

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

asssertThat(data, is(expectedData));

请注意:

  • 也许您需要类型提示来调用 singletonMap
  • 除了 is 匹配器之外,还有其他匹配器可以让您检查数据是否包含您的“预期” map 数据

对于您的具体问题:这是因为泛型如何在这里发挥作用引起的;使用 (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));
}

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

关于java - JUnit 断言 : check that Object equals String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39956310/

相关文章:

java - 如何在json字符串java中的数字之间留一个空格?

android - Google Play Store Web to Device 安装未通过 INSTALL_REFERRER

java - @After 注释在 JAVA 7 中使用 JUnit 时首先运行

java - 如何对双向文本处理进行单元测试

java - JPanel 平滑运动并同时更新 JLabel

java - Uri 引起的 CursorIndexOutOfBoundsException

java - Connect 4应该如何设计一个好的评价函数?

android - 具有 ListView 和 Mysql 后端的 ORM Lite (android)

android - 键入 "cordova build android"时 cordova 出错

Rest Assured API 测试 - 将 Json 对象作为参数传递给获取请求