簡體   English   中英

如何使用 AssertThat 檢查列表中對象的屬性值?

[英]How to use AssertThat to check the property value of objects in a list?

我將使用 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(), ???);

您可以通過以下函數(使用 Java 8 Streams)映射到List<String>以提取所有數據字符串

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您可以斷言列表中的每個元素都不是“No”,而hasItem斷言列表中至少有一個值為“No”的元素。


或者,您可以實現一個特征匹配器來避免映射函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM