我正在尝试使用Spring Boot Test来为其余端点编写单元测试,但进展顺利,但是当我尝试使用jsonPath
在json响应中的对象上断言时,即使内容相同,也会引发AssertionError并且相同。
Json示例
{
"status": 200,
"data": [
{
"id": 1,
"placed_by": 1,
"weight": 0.1,
"weight_metric": "KG",
"sent_on": null,
"delivered_on": null,
"status": "PLACED",
"from": "1 string, string, string, string",
"to": "1 string, string, string, string",
"current_location": "1 string, string, string, string"
}
]
}
科特林语代码
mockMvc.perform(
get("/api/v1/stuff")
.contentType(MediaType.APPLICATION_JSON_UTF8)
).andExpect(status().isOk)
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(jsonPath("\$.status").value(HttpStatus.OK.value()))
.andExpect(jsonPath("\$.data.[0]").value(equalTo(stuffDTO.asJsonString())))
点击查看差异说
如何将JSON中的对象与jsonPath匹配?我需要能够与对象匹配,因为该对象可以包含许多字段,并且将成为单独匹配它们的PITA
>答案 0 :(得分:0)
我遇到了类似的问题,尽管很难不知道您的asJsonString
函数是什么。我也使用Java,而不是Kotlin。如果是同一问题:
这是由于jsonPath(expression)
未返回字符串,因此将其与一个字符串匹配不起作用。您需要将stuffDTO
转换为正确的类型以使用JsonPath进行匹配,即。例如:
private <T> T asParsedJson(Object obj) throws JsonProcessingException {
String json = new ObjectMapper().writeValueAsString(obj);
return JsonPath.read(json, "$");
}
然后.andExpect(jsonPath("\$.data.[0]").value(equalTo(asParsedJson(stuffDTO))))
应该起作用。