SpringMVC/ mockMVC/ jsonpath 比较字符串列表
2022-09-01 07:14:52
我目前正在为Spring MVC项目编写一些单元测试。由于返回的媒体类型是 JSON,因此我尝试使用 jsonPath 检查是否返回了正确的值。
我遇到的问题是验证字符串列表是否包含正确(且仅正确)的值。
我的计划是:
- 检查列表的长度是否正确
- 对于应该返回的每个元素,请检查它是否在列表中
可悲的是,这些事情似乎都不起作用。
以下是我的代码的相关部分:
Collection<AuthorityRole> correctRoles = magicDataSource.getRoles();
ResultActions actions = this.mockMvc.perform(get("/accounts/current/roles").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()) // works
.andExpect(jsonPath("$.data.roles").isArray()) // works
.andExpect(jsonPath("$.data.roles.length").value(correctRoles.size())); // doesn't work
for (AuthorityRole role : correctRoles) // doesn't work
actions.andExpect(jsonPath("$.data.roles[?(@=='%s')]", role.toString()).exists());
只有前两个“期望”(isOk和isArray)在起作用。其他的(对于长度和内容)我可以随心所欲地扭曲和转动,它们没有给我任何有用的结果。
有什么建议吗?