BAEL-7091 Asserting Nested Map with JUnit
This commit is contained in:
parent
a127e7644e
commit
c61a1dace1
|
@ -6,6 +6,18 @@
|
||||||
<artifactId>hamcrest</artifactId>
|
<artifactId>hamcrest</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
<name>hamcrest</name>
|
<name>hamcrest</name>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>9</source>
|
||||||
|
<target>9</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
package com.baeldung.hamcrest.assertnestedmap;
|
||||||
|
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static com.baeldung.hamcrest.assertnestedmap.matchers.NestedMapMatcher.hasNestedMapEntry;
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
import static org.hamcrest.Matchers.*;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
public class AssertNestedMapUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenNestedMap_whenUseJupiterAssertTrueWithoutCasting_thenTest() {
|
||||||
|
Map<String, Object> innerMap = Map.of("city", "Chicago");
|
||||||
|
Map<String, Map<String, Object>> outerMap = Map.of("address", innerMap);
|
||||||
|
|
||||||
|
assertTrue(outerMap.containsKey("address") && outerMap.get("address").get("city").equals("Chicago"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenNestedMap_whenUseJupiterAssertAllAndAssertTrue_thenTest() {
|
||||||
|
Map<String, Object> innerMap = Map.of("city", "Chicago");
|
||||||
|
Map<String, Map<String, Object>> outerMap = Map.of("address", innerMap);
|
||||||
|
|
||||||
|
assertAll(
|
||||||
|
() -> assertTrue(outerMap.containsKey("address")),
|
||||||
|
() -> assertEquals(outerMap.get("address").get("city"), "Chicago")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenNestedMap_whenUseJupiterAssertTrueWithCasting_thenTest() {
|
||||||
|
Map<String, Object> innerMap = Map.of("city", "Chicago");
|
||||||
|
Map<String, Object> outerMap = Map.of("address", innerMap);
|
||||||
|
|
||||||
|
assertTrue(outerMap.containsKey("address")
|
||||||
|
&& ((Map<String, Object>)outerMap.get("address")).get("city").equals("Chicago"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenNestedMap_whenUseHamcrestAssertThat_thenTest() {
|
||||||
|
Map<String, Object> innerMap = Map.of("city", "Chicago");
|
||||||
|
Map<String, Map<String, Object>> outerMap = Map.of("address", innerMap);
|
||||||
|
assertAll(
|
||||||
|
() -> assertThat(outerMap, hasKey("address")),
|
||||||
|
() -> assertThat(outerMap.get("address"), hasEntry("city", "Chicago"))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenNestedMapOfStringAndObject_whenUseHamcrestAssertThat_thenTest() {
|
||||||
|
Map<String, Object> innerMap = Map.of("city", "Chicago");
|
||||||
|
Map<String, Map<String, Object>> outerMap = Map.of("address", innerMap);
|
||||||
|
|
||||||
|
assertThat(outerMap, hasEntry(equalTo("address"), hasEntry("city", "Chicago")));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenNestedMapOfStringAndObject_whenUseHamcrestAssertThatAndCustomMatcher_thenTest() {
|
||||||
|
Map<String, Object> innerMap = Map.of
|
||||||
|
(
|
||||||
|
"city", "Chicago",
|
||||||
|
"zip", "10005"
|
||||||
|
);
|
||||||
|
Map<String, Map<String, Object>> outerMap = Map.of("address", innerMap);
|
||||||
|
|
||||||
|
assertThat(outerMap, hasNestedMapEntry("address", innerMap));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenOuterMapOfStringAndObjectAndInnerMap_whenUseHamcrestAssertThatAndCustomMatcher_thenTest() {
|
||||||
|
Map<String, Object> innerMap = Map.of
|
||||||
|
(
|
||||||
|
"city", "Chicago",
|
||||||
|
"zip", "10005"
|
||||||
|
);
|
||||||
|
Map<String, Object> outerMap = Map.of("address", innerMap);
|
||||||
|
|
||||||
|
assertThat(outerMap, hasNestedMapEntry("address", innerMap));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenNestedMap_whenUseHamcrestAssertThatWithCasting_thenTest() {
|
||||||
|
Map<String, Object> innerMap = Map.of("city", "Chicago");
|
||||||
|
Map<String, Object> outerMap = Map.of("address", innerMap);
|
||||||
|
|
||||||
|
assertThat((Map<String, Object>)outerMap.get("address"), hasEntry("city", "Chicago"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.baeldung.hamcrest.assertnestedmap.matchers;
|
||||||
|
|
||||||
|
|
||||||
|
import org.hamcrest.Description;
|
||||||
|
import org.hamcrest.Matcher;
|
||||||
|
import org.hamcrest.TypeSafeMatcher;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class NestedMapMatcher<K, V> extends TypeSafeMatcher<Map<K, Object>> {
|
||||||
|
private K key;
|
||||||
|
private V subMapValue;
|
||||||
|
|
||||||
|
public NestedMapMatcher(K key, V subMapValue) {
|
||||||
|
this.key = key;
|
||||||
|
this.subMapValue = subMapValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean matchesSafely(Map<K, Object> item) {
|
||||||
|
if (item.containsKey(key)) {
|
||||||
|
Object actualValue = item.get(key);
|
||||||
|
return subMapValue.equals(actualValue);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void describeTo(Description description) {
|
||||||
|
description.appendText("a map containing key ").appendValue(key)
|
||||||
|
.appendText(" with value ").appendValue(subMapValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <K, V> Matcher<V> hasNestedMapEntry(K key, V expectedValue) {
|
||||||
|
return new NestedMapMatcher(key, expectedValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue