【发布时间】:2015-04-14 07:04:25
【问题描述】:
使用新的 Assert 语法,在测试身份时,可以这样写
Assert.assertThat(obj1, CoreMatchers.sameInstance(obj2))
而不是
Assert.assertSame(obj1, obj2)
我正在尝试断言地图的身份。所以我写了
Assert.assertThat(map1, CoreMatchers.sameInstance(map2))
其中 map 的类型为 HashMap<String,String>
但是我的测试在编译时失败了:
Error:(33, 9) error: no suitable method found for assertThat(Map,Matcher<Map<String,String>>)
method Assert.<T#1>assertThat(String,T#1,Matcher<? super T#1>) is not applicable
(cannot infer type-variable(s) T#1
(actual and formal argument lists differ in length))
method Assert.<T#2>assertThat(T#2,Matcher<? super T#2>) is not applicable
(cannot infer type-variable(s) T#2
(argument mismatch; Matcher<Map<String,String>> cannot be converted to Matcher<? super Map>))
where T#1,T#2 are type-variables:
T#1 extends Object declared in method <T#1>assertThat(String,T#1,Matcher<? super T#1>)
T#2 extends Object declared in method <T#2>assertThat(T#2,Matcher<? super T#2>)
Error:(33) error: no suitable method found for assertThat(Map,Matcher<Map<String,String>>)
为什么 JUnit(或 Hamcrest)不能确定使用哪个匹配器?
【问题讨论】:
-
map1是原始的Map还是Map<String, String>?如果它是原始的Map,它可能不应该是。 -
运行时失败?这看起来像一个编译时错误。
map1和map2是如何声明的? -
糟糕!它在编译时失败。
标签: java unit-testing junit hamcrest