2015-05-29 26 views
0

我不知道如何使用hamcrest創建代碼來檢查具有這些屬性的數組內的數組。處理與hamcrest陣列和放心

(想象一下,這是它與不同數據的多個條目)

{ 
     "mobilenum": "+6519829340", 
     "firstname": "Allen", 
     "lastname": "Edwards", 
     "location": "Singapore" 
    } 

如果我用這個:

.body("smsentries.mobilenum", contains(equalTo("+6519829340"))); 

它返回它確實存在,但我怎麼能放更多的檢查,該它發現的對象也具有相同的名字,姓氏和位置?

我也認爲這是錯誤的:

.body("smsentries.mobilenum", contains(equalTo("+6519829340"))) 
     .and() 
.body("smsentries.firstname", contains(equalTo("Allen")); 

正如我明白這裏是它搜索數組如果數組包含mobilenum等於提供什麼,如果數組包含名爲「艾倫」

我需要的是找到mobilenum等於「+6519829340」並且名字等於「Allen」的陣列。

你們和gals有什麼想法該怎麼做?

回答

2

我需要的是找到mobilenum等於 「+6519829340」並且名字等於「Allen」的陣列。

您可以使用「查找」的方法:

.body("smsentries.find { it.mobilenum == '+6519829340' }.firstname", equalTo("Allen") 
.body("smsentries.find { it.mobilenum == '+6519829340' }.lastname", equalTo("Edwards"). 

正如你看到你基本上覆制在兩種情況下的路徑表達式,從而改善這一點,我們可以使root paths使用:

.root("smsentries.find { it.mobilenum == '+6519829340' }").  
.body("firstname", equalTo("Allen") 
.body("lastname", equalTo("Edwards"). 

您也可以參數根路徑:

.root("smsentries.find { it.mobilenum == '%s' }").  
.body("firstname", withArgs("+6519829340"), equalTo("Allen") 
.body("lastname", withArgs("+6519829340"), equalTo("Edwards"). 
.body("firstname", withArgs("+12345678"), equalTo("John") 
.body("lastname", withArgs("+12345678"), equalTo("Doe"). 
+0

嗨,johan!謝謝你!但我確實有另一個問題。如果名字等於x並且姓氏等於y,那麼語法是什麼,然後數字應該是z。上面的數據的另一個例子是除了在現場以外具有相同的數據。我如何結合條件? –

+0

我認爲你應該爲此創建一個新問題並將其標記爲已回答。如果您在這裏留下評論(帶有新問題的鏈接),我也可以回答新的問題。 – Johan

+0

我想你是對的。這裏是我的問題的新鏈接:http://stackoverflow.com/questions/30706158/json-arrays-with-duplicate-items-with-hamcrest-and-restassured謝謝! –