2016-07-29 64 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

我认为这只会检查一次状态是否存在。在所有状态中,这将是所有不同事件的状态 –

相关问题