我将使用asserThat来验证ArrayList中对象的属性。
我可以使用assertThat如果没有任何对象包含要测试的数据但我无法确定如何使用assertThat如果只有一个对象包含要测试的数据。
示例代码:
public class dataNeeded {
String data;
String modifiedDate;
public String getData(){
return data;
}
......
}
public ArrayList<dataNeeded> returnsNeededData(){
...
}
List<dataNeeded> dataToBeTested = returnsNeededData();
dataToBeTested.forEach(data->assertThat(data.getData(), not(equalTo("No"))));
List<dataNeeded> dataToBeTested2 = returnsNeededData();
// I need to verify if one of the objects in this list has it's data as "No"
dataToBeTested.forEach(data->assertThat(data.getData(), ???);
答案 0 :(得分:1)
您可以通过以下函数映射到List<String>
(使用Java 8 Streams)来提取所有数据字符串
private List<String> mapToDataStrings(List<dataNeeded> neededData) {
return neededData.stream()
.map(dataNeeded -> dataNeeded.getData())
.collect(toList());
}
然后使用everyItem
中的hasItem
/ Matchers
函数对结果字符串列表进行断言:
List<String> dataToBeTested = mapToDataStrings(returnsNeededData());
assertThat(dataToBeTested, everyItem(not("No")));
List<String> dataToBeTested2 = mapToDataStrings(returnsNeededData());
assertThat(dataToBeTested2, hasItem("No"));
使用everyItem
,您可以断言列表中的每个元素都不是&#34;否&#34;并且hasItem
断言列表中至少有一个元素值为&#34; No&#34;。
或者,您可以实现feature matcher以避免映射功能。