A veces Map.equals()
es suficiente. Pero a veces usted no sabe que el tipo de Map
s es devuelto por el código bajo prueba, por lo que no sabe si .equals()
comparará correctamente ese mapa de tipo desconocido devuelto por el código con el mapa creado por usted. O no desea vincular su código con tales pruebas.
Además, la construcción de un mapa separado para comparar el resultado con el que es mi humilde opinión no muy 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));
Yo prefiero usar 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))
));
tengo que definir hasSize()
a mí mismo:
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");
}
};
}
Y hay otra variante de hasEntry()
que toma matchers como parámetros en lugar de valores exactos de clave y valor. Esto puede ser útil en caso de que necesite algo más que la prueba de igualdad de cada clave y valor.
También he intentado 'containsAll' et al. Hace algún tiempo y no parecía funcionar - al parecer, Hamcrest es un poco poco confiable todavía :-( –
¿Hay alguna razón por la cual no puedas usar los '.equals()' de la implementación del Mapa? –
Ah, yo no No se dio cuenta de que las colecciones hacen comparaciones apropiadas de .equals(). ¿Siempre ha sido así? Eso hace la vida mucho más fácil. ¡Gracias! –