使用mockmvc测试如何处理无序数组

时间:2017-09-22 15:21:17

标签: spring spring-boot junit mockmvc

当返回的数组无序时,如何测试正确的测试结果?我的测试失败,因为它们在数组中的顺序在每次测试运行时都是不同的。如何修复无序数组的这个或帐户?

mockMvc.perform(delete("/deleteSomeObject" + "/objIdLong" + "/objFKeyString"))
    .
    .
    .andExpect(jsonPath("$[0].id.objIdLong", is(533252)))
    .andExpect(jsonPath("$[0].id.objFKeyString", is("SomeString")))
    .andExpect(jsonPath("$[1].id.objIdLong", is(642654252)))
    .andExpect(jsonPath("$[1].id.objFKeyString", is("ThisString")))
    .andExpect(jsonPath("$[2].id.objIdLong", is(4624352)))
    .andExpect(jsonPath("$[2].id.objFKeyString", is("SomeOtherString")));

1 个答案:

答案 0 :(得分:0)

您可以使用'any element'指令并防止误报,其中一个元素具有预期的objIdLong,而另一个元素具有预期的objFKeyString,您可以组合访问者。

这样的事情:

.andExpect(jsonPath('$.id[?(@.objIdLong == 533252 && @.objFKeyString == \'SomeString\')]').exists())
.andExpect(jsonPath('$.id[?(@.objIdLong == 642654252 && @.objFKeyString == \'ThisString\')]').exists())
.andExpect(jsonPath('$.id[?(@.objIdLong == 4624352 && @.objFKeyString == \'SomeOtherString\')]').exists())

只要返回的JSON包含:

,这些断言就会被视为真
  • 包含idobjIdLong=533252
  • objFKeyString="SomeString"子文档
  • 包含idobjIdLong=642654252
  • objFKeyString="ThisString"子文档
  • 包含idobjIdLong=4624352
  • objFKeyString="SomeOtherString"子文档