java - 使用 Hamcrest Matchers 检查 JsonPath 的输出

标签 java junit spring-test hamcrest jsonpath

我编写了 Spring Controller 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 jarjson-path-0.9.0.jarspring-test-4.0.9.jar

最佳答案

JSONArray 不是数组而是 ArrayList(即 java.util.List)。

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

关于java - 使用 Hamcrest Matchers 检查 JsonPath 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39847564/

相关文章:

java - getWritableDatabase() 中的 nullPointerException

java - Mockito 正在调用真正的方法而不是 stub

java - 无法使用 Mockito 返回类对象

spring - 如何使用自定义 WebApplicationInitializer 运行测试?

spring - 使用 Spring Junit 测试 Autowiring 失败

java - 使用命令行参数运行 jar 文件

java - 调试 gradle bootRun 有 server=n

java.util.zip.ZipOutputStream - 更快地压缩大文件?

java - 由于预告片,两个相同 PDF 文件的比较失败

java - 避免对 Spring 配置类进行类路径扫描