我不太确定我遇到的问题是否有一个简单的解决方案,但这里是代码摘录:
Map<?,?> m = dbo.toMap();
assertThat(m, Matchers.<Object, Object>hasEntry(is(someKeyValue), is(notNullValue())));
我必须添加这些泛型以安抚编译器,但为什么它不能更简单呢?为什么我必须将通配符捕获添加到m
变量?为什么不能至少这样:
assertThat(dbo.toMap(), hasEntry(is((Object)someKeyValue), is(notNullValue())));
这是simple project。在困扰我的单元测试线中:
// this one doesn't quite work
DBObject dbo = returnSomeDBObject();
Map m3 = dbo.toMap();
assertThat(m3, hasEntry(is((Object)PSF_KEY), is(notNullValue())));
// but this one does
DBObject dbo2 = returnSomeDBObject();
Map<?,?> m4 = dbo.toMap();
assertThat(m4, Matchers.<Object, Object>hasEntry(is(PSF_KEY), is(notNullValue())));
答案 0 :(得分:0)
您可以使用“原始”匹配器:
DBObject dbo = returnSomeDBObject();
Map m3 = dbo.toMap();
assertThat(m3, (Matcher)hasEntry(is("PSF_KEY"), is(notNullValue())));
顺便说一句,您可以使用Matchers.hasKey方法断言地图上有一个带有特定键的条目:
assertThat(m3, (Matcher)hasKey("PSF_KEY"));
但请注意,在地图中处理null
值时,这与第一个断言不同。