专栏首页IT开发技术与工作效率JsonUnit 断言框架用法总结

JsonUnit 断言框架用法总结

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" +
            "            }"
    ));

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Cloud Data Flow(未完成)

    https://docs.spring.io/spring-cloud-dataflow/docs/current-SNAPSHOT/reference/htm...

    林万程
  • VBA透视表筛选子程序

    林万程
  • Excel VBA 基础教程——With和Parent的使用

    林万程
  • 孙正义:未来鞋子都比人聪明,AI智商至少是人类50倍

    30年后,鞋子都比你聪明 ? 量子位(QbitAI) | 若朴 编译整理 在量子位的微信群里,曾经有家长问:面对未来的AI世界,怎么才能让孩子提早准备? 然而也...

    量子位
  • 深度解密:软银孙正义如何成为美国硅谷最有权势之人

    【腾讯科技编者按】据外媒报道,伊隆·马斯克、杰夫·贝索斯亦或是马克·扎克伯格(,都不如日本亿万富翁孙正义那样,对AI驱动的未来有着最大胆的愿景。在孙正义看来,未...

    量子位
  • 孙正义万字访谈:AI是我现在唯一关注的事情,我是科技的绝对信徒

    在接受CNBC超长采访中,软银创始人、千亿美元愿景基金掌舵者一再表示,AI能解决人类无法解决的问题,未来一切都将被重新定义,各行各业、生产方式以及生活方式,都将...

    量子位
  • 天天都在用的 Tmux,可你知道如何在多用户间共享 Session 吗?

    Tmux Server 管理着多个 Session,而一个 Session 可以被多个 Tmux Client连接。这些 Tmux Client 通过一个 U...

    iMike
  • .Net 基于GDI+的图件绘制平台的设计与实现(一)

    程序你好
  • SpringCloud之Gateway

    Spring Cloud Gateway旨在提供一种简单而有效的方法来路由到api,并为它们提供交叉关注点,例如:安全性、监视/度量和弹性。

    用户3467126
  • 元宵快乐:看SQL大师们用SQL绘制的团圆

    题记:在多年以前,论坛活跃的时代,在ITPUB上你能看到各种新奇有趣的知识,及时新鲜的信息,出类拔萃的技巧,有很多让人多年以后还记忆犹新。 这个帖子让我忍不住在...

    数据和云

扫码关注云+社区

领取腾讯云代金券