我已声明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
?
答案 0 :(得分:3)
“更多断言”的做事方式是:
Map<String, Object> expectedData = Collections.singletonMap("key", "value");
asssertThat(data, is(expectedData));
请注意:
针对您的具体问题:这是因为仿制药在这里发挥作用;使用(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));
}
它编译得很好,单元测试运行并通过。换句话说:实际上我无法重复你的问题。
答案 1 :(得分:0)
尝试
assertThat(data.get("key"), equalTo("value"))
或
assertThat(data.get("key"), CoreMatchers.equalTo("value"))