gpt4 book ai didi

java - 如何在 JUnit 测试中验证复杂的 JSONObjects?

转载 作者:搜寻专家 更新时间:2023-10-31 19:59:44 24 4
gpt4 key购买 nike

如何在 JUnit @Test 中正确验证 JSONObject 的字段?

{
"persons": [
"adults": [
{
"name": ".."
"age": ..
},
{
"name": ".."
"age": ..
}
]
]
}

我的意思是,如果在 spring 管理的 web 服务上进行测试,我可以使用 jsonPath() 类似如下:

mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
.andExpect(jsonPath("$.persons[0].adults[0].name", is("John")));

但我在这里没有使用网络服务,而只想验证一个 json 对象。

我能否以某种方式使用 spring 的 jsonPath() 方法,或者是否有类似的技术?

最佳答案

你可以使用 Jayway JsonPath没有它的 Spring 包装。

例如:

String json = "{\n" +
" \"persons\": [\n" +
" {\n" +
" \"adults\": [\n" +
" {\n" +
" \"name\": \"John\",\n" +
" \"age\": 25\n" +
" },\n" +
" {\n" +
" \"name\": \"Jill\",\n" +
" \"age\": 36\n" +
" }\n" +
" ]\n" +
" }\n" +
" ]\n" +
"}";

DocumentContext documentContext = JsonPath.parse(json);

assertThat(documentContext.read("$.persons[0].adults[0].name"), is("John"));
assertThat(documentContext.read("$.persons[0].adults[1].age"), is(36));
assertThat(documentContext.read("$.persons.length()"), is(1));
assertThat(documentContext.read("$.persons[0].adults.length()"), is(2));

或者,您也可以使用 json-path-assert在 JsonPath 之上添加 Hamcrest 匹配器,如下所示:

assertThat(json, hasJsonPath("$.persons[0].adults[0].name", is("John")));
assertThat(json, hasJsonPath("$.persons[0].adults[1].age", is(36)));

Maven 坐标:

<!-- jayway jsonpath -->
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.3.0</version>
<scope>test</scope>
</dependency>

<!-- json-path-assert -->
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path-assert</artifactId>
<version>2.2.0</version>
<scope>test</scope>
</dependency>

关于java - 如何在 JUnit 测试中验证复杂的 JSONObjects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48669385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com