mem*_*und 5 java junit spring json
如何正确验证a JSONObject中的字段JUnit @Test?
{
"persons": [
"adults": [
{
"name": ".."
"age": ..
},
{
"name": ".."
"age": ..
}
]
]
}
Run Code Online (Sandbox Code Playgroud)
我的意思是,如果在弹簧管理的Web服务上进行测试,则可以使用jsonPath()如下所示的类似方法:
mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
.andExpect(jsonPath("$.persons[0].adults[0].name", is("John")));
Run Code Online (Sandbox Code Playgroud)
但是我不是在这里使用Web服务,而是想只验证一个json对象。
我能以某种jsonPath()方式使用弹簧的方法,还是有类似的技术?
您可以在没有Spring包装的情况下使用Jayway JsonPath。
例如:
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));
Run Code Online (Sandbox Code Playgroud)
或者,也可以在JsonPath之上使用json-path-assert来添加Hamcrest匹配器,如下所示:
assertThat(json, hasJsonPath("$.persons[0].adults[0].name", is("John")));
assertThat(json, hasJsonPath("$.persons[0].adults[1].age", is(36)));
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以根据预期值验证 JSON 回复。您可以使用JSONassert
例子:
final MvcResult result = mockMvc.perform(get("/"))
.andDo(print())
.andExpect(status().isOk())
.andReturn();
final String json = result.getResponse().getContentAsString();
final String expected = "{field:'value', anotherField:true}";
JSONAssert.assertEquals(expected, json, true);
Run Code Online (Sandbox Code Playgroud)
JSONassert 提供了多种验证模式,包括自定义比较器。
这是验证 JSON 输出的非常方便的方法。在许多情况下,它显着减少了单元测试类的大小,并为您提供了预期 JSON 对象的可视化表示。
| 归档时间: |
|
| 查看次数: |
1441 次 |
| 最近记录: |