matchers framework java junit hamcrest

java - framework - hamcrest matchers



Cómo verificar el tamaño del mapa usando Hamcrest (2)

Map<Integer, Map<String, String>> mapMap = new HashMap<Integer,Map<String, String>>();

Afirmando actualmente así

assertThat(mapMap.size(), is(equalTo(1))); Or assertThat(mapMap.values(), hasSize(1));

¿Hay otros métodos como el que se usa con las listas?

assertThat (someListReferenceVariable, hasSize (1));


No hay ninguno en Hamcrest 1.3, pero puedes crear el tuyo muy fácilmente:

public class IsMapWithSize<K, V> extends FeatureMatcher<Map<? extends K, ? extends V>, Integer> { public IsMapWithSize(Matcher<? super Integer> sizeMatcher) { super(sizeMatcher, "a map with size", "map size"); } @Override protected Integer featureValueOf(Map<? extends K, ? extends V> actual) { return actual.size(); } /** * Creates a matcher for {@link java.util.Map}s that matches when the * <code>size()</code> method returns a value that satisfies the specified * matcher. * <p/> * For example: * * <pre> * Map&lt;String, Integer&gt; map = new HashMap&lt;&gt;(); * map.put(&quot;key&quot;, 1); * assertThat(map, isMapWithSize(equalTo(1))); * </pre> * * @param sizeMatcher * a matcher for the size of an examined {@link java.util.Map} */ @Factory public static <K, V> Matcher<Map<? extends K, ? extends V>> isMapWithSize(Matcher<? super Integer> sizeMatcher) { return new IsMapWithSize<K, V>(sizeMatcher); } /** * Creates a matcher for {@link java.util.Map}s that matches when the * <code>size()</code> method returns a value equal to the specified * <code>size</code>. * <p/> * For example: * * <pre> * Map&lt;String, Integer&gt; map = new HashMap&lt;&gt;(); * map.put(&quot;key&quot;, 1); * assertThat(map, isMapWithSize(1)); * </pre> * * @param size * the expected size of an examined {@link java.util.Map} */ @Factory public static <K, V> Matcher<Map<? extends K, ? extends V>> isMapWithSize(int size) { Matcher<? super Integer> matcher = equalTo(size); return IsMapWithSize.<K, V> isMapWithSize(matcher); } }

Pruebas:

Map<String, Integer> map = new HashMap<>(); map.put("key", 1); assertThat(map, isMapWithSize(1)); assertThat(map, isMapWithSize(equalTo(1)));


Las buenas noticias

Hay un comparador que hace exactamente lo que quiere en la rama principal actual del proyecto JavaHamcrest . Puedes llamarlo así:

assertThat(mapMap, aMapWithSize(1));

Y las malas noticias

Desafortunadamente, este matcher no está en la última versión de Hamcrest (1.3).

[Actualización] Y, finalmente, las muy buenas noticias.

El emparejador mencionado anteriormente se incluye en la versión 2.1 recientemente lanzada.