如何使用 jsonpath 统计成员数?

新手上路,请多包涵

是否可以使用 JsonPath 统计成员数量?

使用 Spring MVC 测试 我正在测试生成的控制器

{"foo": "oof", "bar": "rab"}

和:

 standaloneSetup(new FooController(fooService)).build()
    .perform(get("/something").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
    .andExpect(jsonPath("$.foo").value("oof"))
    .andExpect(jsonPath("$.bar").value("rab"));

我想确保生成的 json 中没有其他成员。希望通过使用 jsonPath 来计算它们。可能吗?也欢迎其他解决方案。

原文由 NA. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 841
2 个回答

测试 数组 的大小: jsonPath("$", hasSize(4))

计算 对象 的成员: jsonPath("$.*", hasSize(4))


即测试 API 返回一个包含 4 个项目的 数组

可接受的值: [1,2,3,4]

 mockMvc.perform(get(API_URL))
       .andExpect(jsonPath("$", hasSize(4)));


测试该 API 返回一个包含 2 个成员的 对象

可接受的值: {"foo": "oof", "bar": "rab"}

 mockMvc.perform(get(API_URL))
       .andExpect(jsonPath("$.*", hasSize(2)));


我正在使用 Hamcrest 1.3 版和 Spring Test 3.2.5.RELEASE

hasSize(int) javadoc

注意:您需要包括 hamcrest-library 依赖项和 import static org.hamcrest.Matchers.*; hasSize() 才能工作。

原文由 lopisan 发布,翻译遵循 CC BY-SA 4.0 许可协议

您还可以使用 jsonpath 中的方法,而不是

mockMvc.perform(get(API_URL))
   .andExpect(jsonPath("$.*", hasSize(2)));

你可以做

mockMvc.perform(get(API_URL))
   .andExpect(jsonPath("$.length()", is(2)));

原文由 stalet 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题