Hamcrest Matchers中的泛型

时间:2015-07-22 15:32:30

标签: java generics hamcrest

我不太确定我遇到的问题是否有一个简单的解决方案,但这里是代码摘录:

 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())));

1 个答案:

答案 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值时,这与第一个断言不同。