2017-06-01 81 views
0

我想寫一個JUnit測試,它會檢查接收到的JSON的值。我使用jsonPath在JSON中訪問這些值。我想檢查一個值是否爲true。對於簡單的jsonPaths,它爲我工作,但是當我編寫更復雜的jsonPath查詢,它不和我正在此斷言錯誤:使用jsonPath匹配布爾真值

Expected: is <true> 
but: was <[true]> 

我的JSON:

{... 
,"trips": 
    [ 
    {... 
    ,"employee":{"name":"Ordinary Joe","login":"joe","contractor":true} 
    ,... 
    }, 
    ... 
    ], 
... 
} 

有問題斷言

.andExpect(jsonPath("$.trips[?(@.employee.login=='joe')].employee.contractor", is(true))); 

我已經試過

我想也new Boolean(true)boolean[]陣列與一個true價值和is()匹配也檢查與String.valueOf(true)但是之後也沒有匹配匹配值。

我的問題

我應該如何正確地匹配這個true價值?在測試輸出中,這些大括號意味着什麼?

回答

0

在進一步的調查,我居然發現jsonPath某種方式與一個項目所獲得的true值到JsonArray轉換,因此無法與is(true)匹配匹配。我不確定爲什麼JsonPath會這樣做。

我發現使用hasItem匹配,而不是下面的工作解決方法:

.andExpect(jsonPath("$.trips[?(@.employee.login=='joe')].employee.contractor", hasItem(true))) 
.andExpect(jsonPath("$.trips[?(@.employee.login=='joe')].employee.contractor", not(hasItem(false)))) 
+0

它可能返回JsonArray,因爲它不能保證,有將只有一個表達式匹配的值。 –