JUnit assertThat:检查对象是否等于字符串
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
?
"more assertThat" 做事的方式是:
Map<String, Object> expectedData = Collections.singletonMap("key", "value");
asssertThat(data, is(expectedData));
请注意:
- 也许您需要类型提示来调用 singletonMap
- 除了 is 匹配器之外,还有其他匹配器可以让您检查数据 包含 您的 "expected" 地图数据
对于您的具体问题:这是因为泛型在这里发挥作用所造成的;使用 (String) data.get("key")
可能就足够了 - 告诉编译器 "actual" 参数是字符串类型。
最后 - 我不知道你的问题是什么。我记下了这段代码:
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"))
我已 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
?
"more assertThat" 做事的方式是:
Map<String, Object> expectedData = Collections.singletonMap("key", "value");
asssertThat(data, is(expectedData));
请注意:
- 也许您需要类型提示来调用 singletonMap
- 除了 is 匹配器之外,还有其他匹配器可以让您检查数据 包含 您的 "expected" 地图数据
对于您的具体问题:这是因为泛型在这里发挥作用所造成的;使用 (String) data.get("key")
可能就足够了 - 告诉编译器 "actual" 参数是字符串类型。
最后 - 我不知道你的问题是什么。我记下了这段代码:
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"))