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

Posted

技术标签:

【中文标题】使用mockmvc测试如何处理无序数组【英文标题】:Testing using mockmvc how to deal with unordered array 【发布时间】:2018-03-04 05:36:29 【问题描述】:

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

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】:

您可以使用“任何元素”指令并防止误报,其中一个元素具有预期的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 包含以下内容,这些断言就会被视为正确:

带有objIdLong=533252objFKeyString="SomeString"id 子文档 带有objIdLong=642654252objFKeyString="ThisString"id 子文档 带有objIdLong=4624352objFKeyString="SomeOtherString"id 子文档

【讨论】:

感谢您的重播。这没有用。我收到一个错误“字符文字中的字符太多” @user1518234 你也许可以用MCVE 更新你的问题,或者至少包括你想要询问的JSON。如果没有详细信息,回答您的问题需要一些猜测工作。 很抱歉我没有使用 MCVE 进行更新。我得到了这个工作,但已经太久了,我忘记了修复。将来我会更好地用我的发现和解决方案更新我的帖子。

以上是关于使用mockmvc测试如何处理无序数组的主要内容,如果未能解决你的问题,请参考以下文章

如何处理插入 '\0' 的字符数组?

PHP XML RPC - 如何处理返回的数组

如何处理动态填充 ul li 的点击事件?

单元测试时如何处理 API 调用速率限制?

使用 protobuf-net 序列化数组时如何处理空值?

如何处理nodejs中的数组缓冲区分配失败?