2017-09-22 78 views
1

當我的返回數組無序時,如何測試正確的測試結果?我的測試失敗,因爲它們在陣列中的順序在每次測試中都不相同。我該如何解決這個問題或解決無序數組問題?使用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"))); 

回答

0

您可以使用「任何元素」的指令,並防止誤報,其中一個元素具有預期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子文檔的id子文件與objIdLong=642654252objFKeyString="ThisString"
  • id子文檔objIdLong=4624352objFKeyString="SomeOtherString"
+0

謝謝您的重播。這沒有奏效。我得到了一個錯誤「字符字面值太多的字符」 –

+0

@ user1518234您可能可以用[MCVE](https://stackoverflow.com/help/mcve)更新您的問題,或者至少包括您想要的JSON審問。沒有細節,回答你的問題涉及一些猜測工作。 – glytching

+0

對不起,我沒有更新與MCVE。我得到了這個工作,但是我忘了這個修復已經很久了。在未來,我會更好地用我的發現和解決方案更新我的帖子。 –

相關問題