#serde-json #json-diff #json #testing #error-message #object

dev assert-json-diff

轻松比较两个 JSON 值并获得出色的输出

11 个版本 (稳定版)

2.0.2 2022年6月29日
2.0.1 2021年2月14日
2.0.0 2021年1月23日
1.1.0 2020年7月12日
0.2.1 2018年11月17日

开发工具 中排名第 4

Download history 226372/week @ 2024-04-16 217774/week @ 2024-04-23 212315/week @ 2024-04-30 213319/week @ 2024-05-07 226962/week @ 2024-05-14 227471/week @ 2024-05-21 247098/week @ 2024-05-28 259754/week @ 2024-06-04 263383/week @ 2024-06-11 243427/week @ 2024-06-18 247744/week @ 2024-06-25 235726/week @ 2024-07-02 251471/week @ 2024-07-09 292200/week @ 2024-07-16 311701/week @ 2024-07-23 333336/week @ 2024-07-30

每月下载量 1,243,861
1,187 软件包使用 (直接使用 116 个)

MIT 许可证

43KB
884

Crates.io Docs dependency status Build status maintenance-status

assert-json-diff

此软件包包含通过比较其 JSON 表示形式来比较两个可序列化值的宏。它旨在提供比标准 assert_eq! 更有帮助的错误消息。它基本上对两个对象进行差异比较,并告诉你确切的区别。当断言两个大型 JSON 对象相同时应使用它。

它使用 serdeserde_json 来执行序列化。

部分匹配

如果您想断言一个 JSON 值是另一个 JSON 值的“包含”部分,请使用 assert_json_include

use assert_json_diff::assert_json_include;
use serde_json::json;

let a = json!({
    "data": {
        "users": [
            {
                "id": 1,
                "country": {
                    "name": "Denmark"
                }
            },
            {
                "id": 24,
                "country": {
                    "name": "Denmark"
                }
            }
        ]
    }
});

let b = json!({
    "data": {
        "users": [
            {
                "id": 1,
                "country": {
                    "name": "Sweden"
                }
            },
            {
                "id": 2,
                "country": {
                    "name": "Denmark"
                }
            }
        ]
    }
});

assert_json_include!(actual: a, expected: b)

这将引发恐慌,并显示错误消息

json atoms at path ".data.users[0].country.name" are not equal:
    expected:
        "Sweden"
    actual:
        "Denmark"

json atoms at path ".data.users[1].id" are not equal:
    expected:
        2
    actual:
        24

assert_json_include 允许在 actual 中有额外的数据,但不允许在 expected 中有额外的数据。这样您就可以验证 JSON 的一部分,而无需指定整个内容。例如,此测试通过

use assert_json_diff::assert_json_include;
use serde_json::json;

assert_json_include!(
    actual: json!({
        "a": { "b": 1 },
    }),
    expected: json!({
        "a": {},
    })
)

但是,expected 不能包含额外的数据,所以此测试失败

use assert_json_diff::assert_json_include;
use serde_json::json;

assert_json_include!(
    actual: json!({
        "a": {},
    }),
    expected: json!({
        "a": { "b": 1 },
    })
)

这将打印

json atom at path ".a.b" is missing from actual

精确匹配

如果您想确保两个 JSON 值完全相同,请使用 assert_json_eq

use assert_json_diff::assert_json_eq;
use serde_json::json;

assert_json_eq!(
    json!({ "a": { "b": 1 } }),
    json!({ "a": {} })
)

这将引发恐慌,并显示错误消息

json atom at path ".a.b" is missing from lhs

进一步定制

您可以使用 assert_json_matches 进一步定制比较。

许可证:MIT

依赖项

~0.5–1MB
~20K SLoC