JsonUnit 断言 JSON
<dependency>
<groupId>net.javacrumbs.json-unit</groupId>
<artifactId>json-unit-assertj</artifactId>
<version>2.13.0</version>
<scope>test</scope>
</dependency>
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.json;
assertThatJson("{\"a\":1, \"b\":2}").isEqualTo("{b:2, a:1}");
assertThatJson(jacksonObject).isEqualTo("{\n\"test\": 1\n}");
assertThatJson("{\"a\":1}").isObject()
.containsEntry("a", BigDecimal.valueOf(1));
assertThatJson("{\"test\":1.00001}").node("test")
.withTolerance(0.001).isEqualTo(1);
数组
assertThatJson("{\"a\":[{\"b\": 1}, {\"c\": 1}, {\"d\": 1}]}")
.node("a").isArray()
.contains(json("{\"c\": 1}"));
assertThatJson("{\"root\":{\"test\":[1,2,3]}}")
.node("root.test[-1]").isEqualTo(3);
类型
assertThatJson("{\"test\":\"value\"}")
.isEqualTo("{test:'${json-unit.any-string}'}");
assertThatJson("{\"test\":true}")
.isEqualTo("{\"test\":\"${json-unit.any-boolean}\"}");
assertThatJson("{\"test\":1.1}")
.isEqualTo("{\"test\":\"${json-unit.any-number}\"}");
忽略
assertThatJson("{\n\"test\": {\"object\" : {\"another\" : 1}}}")
.isEqualTo("{\"test\":\"${json-unit.ignore}\"}");
assertThatJson("{\"root\":{\"test\":1, \"ignored\": null}}")
.isEqualTo("{\"root\":{\"test\":1, \"ignored\": \"${json-unit.ignore-element}\"}}");
assertThatJson("{\"root\":{\"test\":1, \"ignored\": 1}}")
.whenIgnoringPaths("root.ignored"))
.isEqualTo("{\"root\":{\"test\":1}}");
与或非
assertThatJson("{\"test\":{\"a\":1, \"b\":2, \"c\":3}}").and(
a -> a.node("test.a").isEqualTo(1),
a -> a.node("test.b").isEqualTo(2)
);
正则
assertThatJson("{\"test\": \"ABCD\"}")
.isEqualTo("{\"test\": \"${json-unit.regex}[A-Z]+\"}");
自定义
assertThatJson("{\"test\":-1}")
.withConfiguration(c -> c.withMatcher("positive", greaterThan(valueOf(0))))
.isEqualTo("{\"test\": \"${json-unit.matches:positive}\"}");
配置
assertThatJson("{\"a\":[{\"b\": 1}, {\"c\": 1}, {\"d\": 1}]}")
.when(TREATING_NULL_AS_ABSENT) // 具有空值的字段等效于不存在的字段
.when(IGNORING_ARRAY_ORDER) // 忽略数组中的顺序
.when(IGNORING_EXTRA_ARRAY_ITEMS) // 忽略意外的数组项
.when(IGNORING_EXTRA_FIELDS) // 忽略比较值中的额外字段
.when(IGNORE_VALUES) // 忽略值并仅比较类型
.node("a").isArray()
.isEqualTo(json("[{\"c\": 1}, {\"b\": 1} ,{\"d\": 1}]"));
JsonPath
assertThatJson(json)
.inPath("$.store.book").isArray()
.contains(json(
" {\n" +
" \"category\": \"reference\",\n" +
" \"author\": \"Nigel Rees\",\n" +
" \"title\": \"Sayings of the Century\",\n" +
" \"price\": 8.96\n" +
" }"
));
网友评论