2016-07-29 62 views
1

這個測試給了我所有狀態作爲一個布爾值True或從API錯誤:ArrayList的<Boolean>斷言無渣hamcrest

List<Boolean> allStatus = event.getResponse().getBody().jsonPath().getList("enabled"); 

有多少狀態不會有具體的想法,有沒有固定的大小;它可能是大小20或1

要檢查這一說法,我運行一個for循環和檢查每個值:

assertNotNull(allStatus); 
for (Boolean status : allStatus) { 
    assertEquals("FAILED Disable event status ", false, status); 
} 

我想知道還有什麼更好的辦法來處理這樣的場景?

+0

你說的更好呢?你在尋找更短的?它不能變得更快。 – 4castle

+0

第一次失敗後你想停止嗎? –

+1

可能的重複[是否有一個Hamcrest「爲每個」匹配一個集合或Iterable匹配匹配單個特定匹配器的所有元素?)(http://stackoverflow.com/questions/28860135/is-there-a-hamcrest -for-each-matcher-that-asserts-all-elements-of-a collection) –

回答

3

你可以使用Java流的allMatch

assertNotNull(allStatus); 
assertTrue(allStatus.stream().allMatch(b -> !b)); 
+0

@ 4castle好主意,編輯 –

+1

其實,你可能想要回到'b - >!b'因爲[源代碼](http://grepcode.com/file/repository.grepcode.com/java/root/ jdk/openjdk/6-b14/java/lang/Boolean.java#Boolean.equals%28java.lang.Object%29)也會拆開。對不起,關於 – 4castle

0

你可以使用streams在Java 8中引入:

List<Boolean> allStatus = new ArrayList<>(); 
allStatus.stream().forEach((status) -> { assert status; }); 

這基本上是做一樣的,你提供的代碼,但是隨着新技術。你不能做得更快,因爲你必須檢查每一個條目。

0

也許做一個斷言?

boolean tmp = true; 
for (Boolean status : allStatus) tmp = tmp&&status; 
assert tmp; 
0

我們可以ASLO以下斷言使用:

List<Boolean> allStatus = event.getResponse().getBody().jsonPath().getList("enabled"); 
assertNotNull(allStatus); 
    assertEquals("FAILED Disable event status ", false, allStatus.contains(Boolean.valueOf(true))); 
+0

我認爲這隻會檢查一次狀態是否存在。在所有狀態中,這將是所有不同事件的狀態 –

相關問題