2016-03-22 198 views
1

我將使用asserThat來驗證ArrayList中對象的屬性。如何使用AssertThat檢查列表中對象的屬性值?

我能夠使用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

你可以調用列表上的.contains()方法嗎? – JustinKSU

+0

。列表中的.contains()方法將檢查對象,但不檢查列表中對象的屬性 –

回答

1

您可以通過下面的函數映射到List<String>(使用Java 8流)中提取的所有數據串

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您可以聲明列表中的每個元素都不是「否」,並且hasItem聲明列表中至少有一個值爲「No」的元素。


或者,您可以實施feature matcher以避免映射功能。

相關問題