当前位置: 首页 > 知识库问答 >
问题:

使用Hamcrest Matcher检查JsonPath的输出

百里骏
2023-03-14

我写了Spring控制器Junits。我使用JsonPath通过< code>["$..id"]。

我有以下作为测试方法:

mockMvc.perform(get(baseURL + "/{Id}/info", ID).session(session))
    .andExpect(status().isOk()) // Success
    .andExpect(jsonPath("$..id").isArray()) // Success
    .andExpect(jsonPath("$..id", Matchers.arrayContainingInAnyOrder(ar))) // Failed
    .andExpect(jsonPath("$", Matchers.hasSize(ar.size()))); // Success

以下是我传递的数据:-

List<String> ar = new ArrayList<String>();
ar.add("ID1");
ar.add("ID2");
ar.add("ID3");
ar.add("ID4");
ar.add("ID5");

我收到的失败消息如下:-

Expected: [<[ID1,ID2,ID3,ID4,ID5]>] in any order
     but: was a net.minidev.json.JSONArray (<["ID1","ID2","ID3","ID4","ID5"]>)

问题是:如何使用<code>org.hamcrest处理JSONArray。匹配器 是否有任何简单的方法来使用jsonPath。

设置:-hamcrest-all-1.3 jarjson-path-0.9.0.jarspring-test-4.0.9.jar

共有3个答案

欧阳何平
2023-03-14

您的示例是字符串项。这是复杂POJO的更广泛的解决方案:

.andExpect(jsonPath("$.items.[?(@.property in ['" + propertyValue + "'])]",hasSize(1)))

在此处查看官方文档:https://github.com/json-path/JsonPath

咸疏珂
2023-03-14

您应该使用:

jsonPath($id,haseItems(id1,id2))

郭璞
2023-03-14

< code>JSONArray不是数组,而是< code>ArrayList(即< code>java.util.List)。

因此,您不应该使用Matchers.arrayContainingInAnyOrder(...),而应该使用Matchers.containsInAnyOrder(...)

 类似资料:
  • 我正在测试返回地图的控制器 测试: 我应该使用哪个表达式从映射中读取键和值? 编辑:解决这个问题的方法可能是: 然后循环通过地图检查值。但是,有没有一种方法可以使用<code>jsonPath</code>来实现这一点?

  • 我有一个问题。我想获取pin码,其中street=='abc strt'<我正在使用Jaway来实现这一点 jaywayxpath:,正在返回

  • 问题内容: 我正在使用pythons子进程模块中的subprocess.check_output执行ping命令。这是我的做法: 它引发一个CalledProcessError并说输出是该函数的参数之一。谁能帮助我如何阅读该输出。我想将输出读取为字符串并进行解析。举例来说,如果ping返回 100%丢包 我需要捕捉一下。如果还有其他更好的方法,请提出建议。谢谢。 问题答案: 在参数列表中,每个条目

  • 注意我使用Mybatis

  • 问题: 我有一个服务,接受一个字符串作为输入。每当某些字段不总是存在时,JSON模式都不同。当这些字段存在时,我如何使用Jayway的查询它们的值? 我尝试过的: 我使用了 返回如果路径没有找到,但是我的代码仍然抛出: 通用域名格式。乱穿马路。jsonpath。PathNotFoundException:路径$['somepath'中缺少属性 当我给它一个不存在的路径。有人知道这可能是什么原因吗?

  • 问题内容: 我试图通过限制用户可以输入的内容来使用户输入不使程序崩溃,例如: 只是一个int 在1到30之间 我编写的代码只能在一定程度上起作用。如果您输入的内容不是整数,它将对其进行检查并要求您再次输入。如果您继续输入除int以外的任何内容,则再次输入。我还有另一个while循环,如果它确实输入一个int,并且它在1-30区域之外,则它将要求用户再次输入。但是,此后,如果用户键入另一个“除int