A volte è sufficiente Map.equals()
. Ma a volte non sai che i tipi di Map
vengono restituiti dal codice sotto test, quindi non sai se .equals()
confronterà correttamente quella mappa di tipo sconosciuto restituita dal codice con la mappa costruita da te. O non vuoi legare il tuo codice con questi test.
Inoltre, la costruzione di una mappa a parte per confrontare il risultato con esso è IMHO non è molto elegante:
Map<MyKey, MyValue> actual = methodUnderTest();
Map<MyKey, MyValue> expected = new HashMap<MyKey, MyValue>();
expected.put(new MyKey(1), new MyValue(10));
expected.put(new MyKey(2), new MyValue(20));
expected.put(new MyKey(3), new MyValue(30));
assertThat(actual, equalTo(expected));
Io preferisco usare machers:
import static org.hamcrest.Matchers.hasEntry;
Map<MyKey, MyValue> actual = methodUnderTest();
assertThat(actual, allOf(
hasSize(3), // make sure there are no extra key/value pairs in map
hasEntry(new MyKey(1), new MyValue(10)),
hasEntry(new MyKey(2), new MyValue(20)),
hasEntry(new MyKey(3), new MyValue(30))
));
devo definire hasSize()
me stesso:
public static <K, V> Matcher<Map<K, V>> hasSize(final int size) {
return new TypeSafeMatcher<Map<K, V>>() {
@Override
public boolean matchesSafely(Map<K, V> kvMap) {
return kvMap.size() == size;
}
@Override
public void describeTo(Description description) {
description.appendText(" has ").appendValue(size).appendText(" key/value pairs");
}
};
}
E c'è un'altra variante di hasEntry()
che accetta i parametri di corrispondenza come parametri anziché i valori esatti di chiave e valore. Questo può essere utile nel caso in cui abbiate bisogno di qualcosa di diverso dal test di uguaglianza di ogni chiave e valore.
Ho anche provato 'containsAll' et al. qualche tempo fa e non sembrava funzionare - apparentemente hamcrest è un po 'inaffidabile ancora :-( –
C'è un motivo per cui non si può usare il '.equals()' dell'implementazione della mappa? –
Ah - I hadn Mi sono reso conto che le raccolte fanno i confronti .equals() adeguati. È sempre stato così? Questo rende la vita molto più facile! Grazie! –