我写了Spring控制器Junits。我使用JsonPath从["$..id"]
的JSON中获取所有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"]>)
**问题是:**如何用org.hamcrest.Matchers;
处理JSONArray有没有什么简单的方法可以使用 jsonPath。
设置:-hamcrest-all-1.3 jar
,json-path-0.9.0.jar
,spring-test-4.0.9.jar
4条答案
按热度按时间soat7uwm1#
JSONArray
不是数组,而是ArrayList
(即java.util.List
)。因此,您不应使用以下内容:
Matchers.arrayContainingInAnyOrder(...)
而是:
Matchers.containsInAnyOrder(...)
。ugmeyewa2#
您应该使用:用途:
(jsonPath("$..id", hasItems(id1,id2))
x759pob23#
您的示例是针对String项的。下面是一个适用于复杂POJO的更广泛的解决方案:
请参阅此处的官方文档:https://github.com/json-path/JsonPath
clj7thdc4#
遇到相同问题,通过以下方式解决