Recentemente ho utilizzato la libreria Hamcrest per scrivere alcuni test e ho avuto abbastanza successo, ma ora ho bisogno di fare qualcosa di più complesso e ho iniziato a vedere molte difficoltà. Devo inpsect e verificare le proprietà degli elementi in una mappa. Il mio codice di produzione è simile al seguente:Come utilizzare Hamcrest per ispezionare gli elementi della mappa
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")));
Desidero scrivere alcuni codici di test come il seguente, ma non viene compilato. Sembra che hasEntry di Hamcrest sia di tipo parametrizzato, mentre hasItem e hasProperty si aspettano solo Object.
assertThat(map, Matchers.<String, List<MyItem>>hasEntry("one", hasItem(hasProperty("name", is("One")))));
mio IDE (Eclipse) sta dando questo messaggio di errore: Il metodo con parametri di tipo <String, List<HamcrestTest.MyItem>>hasEntry(String, List<HamcrestTest.MyItem>)
Matchers
non è applicabile per gli argomenti (String, Matcher<Iterable<? super Object>>)
. Per una cosa penso che Eclipse sia confuso di quale metodo hasEntry
volessi usare, dovrebbe essere hasEntry(org.hamcrest.Matcher<? super K> keyMatcher, org.hamcrest.Matcher<? super V> valueMatcher)
, non lo hasEntry(K key, V value)
.
Devo semplicemente rinunciare e ottenere l'articolo dalla mappa e ispezionare manualmente ogni proprietà? C'è un modo più pulito?
Non credo che questo sarà risolvere l'errore in fase di compilazione, perché il 'hasEntry' restituirà un' Matcher> 'al posto del' richiesta Matcher > ' –
@JohnB: Che ci crediate o no, ma l'ho provato e funziona solo per me. – t0mppa
Potrebbe non funzionare. Buona chiamata –