当返回的数组无序时,如何测试以获得正确的测试结果?我的测试失败,因为在每次测试运行中数组中的顺序不同。如何解决此问题或说明无序数组?
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")));
2条答案
按热度按时间dwthyt8l1#
您可以使用'any element'指令,并且为了防止误报,其中一个元素具有预期的
objIdLong
,而另一个元素具有预期的objFKeyString
,您可以合并存取子。大概是这样的:
只要返回的JSON包含以下内容,这些Assert将被视为真:
objIdLong=533252
和objFKeyString="SomeString"
的id
子文档objIdLong=642654252
和objFKeyString="ThisString"
的id
子文档objIdLong=4624352
和objFKeyString="SomeOtherString"
的id
子文档uklbhaso2#
在撰写本文时,有一种更简单的方法
.andExpect(content().json(expected_response))
.json文件夹(expected_response)validation有一个选项来进行严格或宽松的检查。这对于你不关心响应顺序的数组很有帮助。如果你想打开严格的检查,你可以像
.json(expected_response,true)
一样打开它。你也可以从文件读取器加载整个响应,然后直接Assert,而不必繁琐地写json路径。下面是一个完整的示例。用于从类路径加载测试文件的helper函数
预期响应有一个数组,该数组包含列表中的许多元素,这些元素在每个测试运行期间都是匹配的,尽管它们的顺序是随机的。