我不太确定我遇到的问题是否有一个简单的解决方案,但这里是代码摘录:
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())));
您可以使用“原始”匹配器:
DBObject dbo = returnSomeDBObject();
Map m3 = dbo.toMap();
assertThat(m3, (Matcher)hasEntry(is("PSF_KEY"), is(notNullValue())));
<小时/>
顺便说一句,您可以使用Matchers.hasKey断言 map 有一个带有特定键的条目的方法:
assertThat(m3, (Matcher)hasKey("PSF_KEY"));
但是请注意,这与处理映射中的 null
值时的第一个断言在本质上并不相同。
我是一名优秀的程序员,十分优秀!