Map<Integer, Map<String, String>> mapMap = new HashMap<Integer,Map<String, String>>();
Currently asserting like this
assertThat(mapMap.size(), is(equalTo(1))); Or assertThat(mapMap.values(), hasSize(1));
Are there any other methods like one used with Lists.
assertThat(someListReferenceVariable, hasSize(1));
Hamcrest is a framework for writing matcher objects allowing 'match' rules to be defined declaratively. There are a number of situations where matchers are invaluable, such as UI validation or data filtering, but it is in the area of writing flexible tests that matchers are most commonly used.
Hamcrest is the well-known framework used for unit testing in the Java ecosystem. It's bundled in JUnit and simply put, it uses existing predicates – called matcher classes – for making assertions.
Hamcrest is a widely used framework for unit testing in the Java world. Hamcrest target is to make your tests easier to write and read. For this, it provides additional matcher classes which can be used in test for example written with JUnit. You can also define custom matcher implementations.
The good news
There is a matcher that does exactly what you want in the current master branch of the JavaHamcrest project. You can call it like so:
assertThat(mapMap, aMapWithSize(1));
And the bad news
Unfortunately this matcher is not in the latest release of Hamcrest (1.3).
[Update] And finally the very good news
The aforementioned matcher is included in the newly released version 2.1.
There is none in Hamcrest 1.3, but you can very easily create your own:
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<String, Integer> map = new HashMap<>(); * map.put("key", 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<String, Integer> map = new HashMap<>(); * map.put("key", 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); } }
Testing:
Map<String, Integer> map = new HashMap<>(); map.put("key", 1); assertThat(map, isMapWithSize(1)); assertThat(map, isMapWithSize(equalTo(1)));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With