私は最近Hamcrestライブラリを使っていくつかのテストを書いてきましたが、かなり成功しましたが、もっと複雑なことをする必要があります。私はマップ内のアイテムのプロパティを調べ、検証する必要があります。私の生産コードは次のようになります: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")));
次のようなテストコードを書いてみたいが、コンパイルはしない。ハムクレストの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'が必要な' Matcher> ' –
@ JohnBの代わりに' Matcher> 'を返すので、これはコンパイル時のエラーを解決するとは思わない:それを信じるかどうかは分かりませんが、試してみました。 –
t0mppa
悪い場合があります。いいですよ。 –