2016-03-22 4 views
1

私は、ArrayList内のオブジェクトのプロパティを確認するためにasserThatを使用します。AssertThatを使用してリスト内のオブジェクトのプロパティ値をチェックする方法?

テスト対象のデータが含まれていないオブジェクトがある場合は、assertThatを使用できますが、テスト対象のデータが1つのみの場合は、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

あなたは

private List<String> mapToDataStrings(List<dataNeeded> neededData) { 
    return neededData.stream() 
      .map(dataNeeded -> dataNeeded.getData()) 
      .collect(toList()); 
} 

すべてのデータ列を抽出してeveryItem/hasItemを使用するには、次の関数(Javaの8つのストリームを使用しています)を介してList<String>にマッピングすることができますMatchersの関数を使用して、結果の文字列リストにアサーションを作成します。

List<String> dataToBeTested = mapToDataStrings(returnsNeededData()); 
assertThat(dataToBeTested, everyItem(not("No"))); 

List<String> dataToBeTested2 = mapToDataStrings(returnsNeededData()); 
assertThat(dataToBeTested2, hasItem("No")); 

everyItemを使用すると、リスト内のすべての要素が「いいえ」ではなく、hasItemは、値が「いいえ」のリストに少なくとも1つの要素があると主張できます。


別の方法としては、マッピング機能を回避するためにfeature matcherを実装することができます。