【发布时间】:2013-11-25 16:14:26
【问题描述】:
我最近一直在使用 Hamcrest 库编写一些测试并且非常成功,但现在我需要做一些更复杂的事情并且开始看到很多困难。我需要检查和验证地图中项目的属性。我的生产代码如下所示:
Map<String, List<MyItem>> map = new HashMap<String, List<MyItem>>();
map.put("one", Arrays.asList(new MyItem("One")));
map.put("two", Arrays.asList(new MyItem("Two")));
map.put("three", Arrays.asList(new MyItem("Three")));
我想写一些像下面这样的测试代码,但它不编译。看起来 Hamcrest 的 hasEntry 是类型参数化的,而 hasItem 和 hasProperty 只需要 Object。
assertThat(map, Matchers.<String, List<MyItem>>hasEntry("one", hasItem(hasProperty("name", is("One")))));
我的 IDE (Eclipse) 给出此错误消息:Matchers 类型的参数化方法 <String, List<HamcrestTest.MyItem>>hasEntry(String, List<HamcrestTest.MyItem>) 不适用于参数 (String, Matcher<Iterable<? super Object>>)。一方面,我认为 Eclipse 对我想使用的 hasEntry 方法感到困惑,它应该是 hasEntry(org.hamcrest.Matcher<? super K> keyMatcher, org.hamcrest.Matcher<? super V> valueMatcher) ,而不是 hasEntry(K key, V value)。
我应该放弃并从地图中获取项目并手动检查每个属性吗?有没有更清洁的方法?
【问题讨论】: