使用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=533252
和objFKeyString="SomeString"
的id
子文档
带有objIdLong=642654252
和objFKeyString="ThisString"
的id
子文档
带有objIdLong=4624352
和objFKeyString="SomeOtherString"
的id
子文档
【讨论】:
感谢您的重播。这没有用。我收到一个错误“字符文字中的字符太多” @user1518234 你也许可以用MCVE 更新你的问题,或者至少包括你想要询问的JSON。如果没有详细信息,回答您的问题需要一些猜测工作。 很抱歉我没有使用 MCVE 进行更新。我得到了这个工作,但已经太久了,我忘记了修复。将来我会更好地用我的发现和解决方案更新我的帖子。以上是关于使用mockmvc测试如何处理无序数组的主要内容,如果未能解决你的问题,请参考以下文章