【问题标题】:Testing using mockmvc how to deal with unordered array使用mockmvc测试如何处理无序数组
【发布时间】: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")));

【问题讨论】:

    标签: spring spring-boot junit mockmvc


    【解决方案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 进行更新。我得到了这个工作,但已经太久了,我忘记了修复。将来我会更好地用我的发现和解决方案更新我的帖子。
    猜你喜欢
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多