使用Hamcrest Matchers检查JsonPath的输出

Suh*_*asD 6 java junit hamcrest spring-test jsonpath

我写了Spring控制器Junits。我使用JsonPath使用来从JSON获取所有ID ["$..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
Run Code Online (Sandbox Code Playgroud)

以下是我传递的数据:-

List<String> ar = new ArrayList<String>();
ar.add("ID1");
ar.add("ID2");
ar.add("ID3");
ar.add("ID4");
ar.add("ID5");
Run Code Online (Sandbox Code Playgroud)

我收到以下失败消息:

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

问题是:如何使用JSONArray进行处理?org.hamcrest.Matchers;有没有使用JSONPath的简单方法。

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

Sam*_*nen 7

JSONArray不是数组,而是一个ArrayList(即a java.util.List)。

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


小智 6

你应该使用:

(jsonPath("$..id", hasItems(id1,id2))