我想在spring boot中对创建和更新API进行测试:
@Test
public void shouldCreateNewUser() throws Exception, UserAlreadyExistException {
User user = User.builder()
.id(10L)
.firstName("Alin")
.lastName("Balan")
.mail("alin@yahoo.com")
.password("pass")
.isAdmin(true)
.role(Roles.PTE)
.build();
mvc.perform(MockMvcRequestBuilders.post("/api/users")
.contentType(MediaType.APPLICATION_JSON)
.content(mapper.writeValueAsString(user)))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$[10].id",is(10)));
Mockito.verify(userService, Mockito.times(1)).save(Mockito.any());
}
但我有这个错误
java.lang.assertionerror:json路径“$[10].id”处没有值,异常:json不能为null或空
2条答案
按热度按时间p5cysglq1#
尽管有很多评论,但到目前为止还没有给出答案,我将总结如下:
如果您的api端点
POST /api/users
需要并返回以下json:然后您可以通过
jsonpath
使用:不
$[10].id
. 这里是一个基本的指南jsonpath
.这意味着您的Assert应该如下所示:
vx6bjr1n2#
搜索完整的错误消息时给出了类似的结果:json路径“$.name”处没有值,异常:json不能为null或空,使用mockmvc和spring引导
关于预期json响应的假设
当创建或更新单个用户时,您会期望单个用户对象作为json响应,而不是数组(包含10个用户元素)。
然后,您的Assert应该检查json响应中单个对象的id是否等于
10
:解释
json path是一个用于选择json树节点的正式表达式(与选择xml元素的xpath相比)。
json路径表达式
$
表示根节点json路径
$[10]
计算到第11个元素(从零开始的索引!)数组的根。json路径
$.id
计算为名为的字段id
对象的根目录另见:
baeldung:json路径简介
如何使用mockmvcresultmatchers.jsonpath