JUnit How to test a Map
By:Roy.LiuLast updated:2019-08-17
Forget about JUnit assertEquals(), to test a Map, uses the more expressive IsMapContaining class from hamcrest-library.jar
pom.xml
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> <exclusions> <exclusion> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> </exclusion> </exclusions> </dependency> <!-- This will get hamcrest-core automatically --> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-library</artifactId> <version>1.3</version> <scope>test</scope> </dependency> </dependencies>
1. IsMapContaining Examples
All the below assertThat checks will be passed.
MapTest.java
package com.mkyong; import org.hamcrest.collection.IsMapContaining; import org.junit.Test; import java.util.HashMap; import java.util.Map; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.MatcherAssert.assertThat; public class MapTest { @Test public void testAssertMap() { Map<String, String> map = new HashMap<>(); map.put("j", "java"); map.put("c", "c++"); map.put("p", "python"); map.put("n", "node"); Map<String, String> expected = new HashMap<>(); expected.put("n", "node"); expected.put("c", "c++"); expected.put("j", "java"); expected.put("p", "python"); //All passed / true //1. Test equal, ignore order assertThat(map, is(expected)); //2. Test size assertThat(map.size(), is(4)); //3. Test map entry, best! assertThat(map, IsMapContaining.hasEntry("n", "node")); assertThat(map, not(IsMapContaining.hasEntry("r", "ruby"))); //4. Test map key assertThat(map, IsMapContaining.hasKey("j")); //5. Test map value assertThat(map, IsMapContaining.hasValue("node"));
Note
Try IsMapContaining, before you create your own methods to test a Map.
Try IsMapContaining, before you create your own methods to test a Map.
References
From:一号门
COMMENTS