如何使用 AssertThat 检查列表中对象的 属性 值?
How to use AssertThat to check the property value of objects in a list?
我要使用 asserThat 来验证 ArrayList 中对象的属性。
如果 none 个对象包含要测试的数据,我可以使用 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(), ???);
您可以通过以下函数映射到List<String>
(使用Java 8个流)来提取所有数据字符串
private List<String> mapToDataStrings(List<dataNeeded> neededData) {
return neededData.stream()
.map(dataNeeded -> dataNeeded.getData())
.collect(toList());
}
然后使用 everyItem
/hasItem
function in Matchers
对结果字符串列表进行断言:
List<String> dataToBeTested = mapToDataStrings(returnsNeededData());
assertThat(dataToBeTested, everyItem(not("No")));
List<String> dataToBeTested2 = mapToDataStrings(returnsNeededData());
assertThat(dataToBeTested2, hasItem("No"));
With everyItem
you can assert that every element in the list is not "No" and hasItem
断言列表中至少有一个元素的值为 "No"。
或者,您可以实施 feature matcher 来避免映射功能。
我要使用 asserThat 来验证 ArrayList 中对象的属性。
如果 none 个对象包含要测试的数据,我可以使用 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(), ???);
您可以通过以下函数映射到List<String>
(使用Java 8个流)来提取所有数据字符串
private List<String> mapToDataStrings(List<dataNeeded> neededData) {
return neededData.stream()
.map(dataNeeded -> dataNeeded.getData())
.collect(toList());
}
然后使用 everyItem
/hasItem
function in Matchers
对结果字符串列表进行断言:
List<String> dataToBeTested = mapToDataStrings(returnsNeededData());
assertThat(dataToBeTested, everyItem(not("No")));
List<String> dataToBeTested2 = mapToDataStrings(returnsNeededData());
assertThat(dataToBeTested2, hasItem("No"));
With everyItem
you can assert that every element in the list is not "No" and hasItem
断言列表中至少有一个元素的值为 "No"。
或者,您可以实施 feature matcher 来避免映射功能。