2016-03-22 2 views
1

Ich verwende asserThat, um Eigenschaften von Objekten in einer ArrayList zu überprüfen.Wie verwende ich AssertThat, um den Eigenschaftswert von Objekten in einer Liste zu überprüfen?

Ich kann assertThat verwenden, wenn keines der Objekte zu testende Daten enthält, aber ich kann nicht herausfinden, wie assertThat verwendet wird, wenn nur eines der Objekte zu testende Daten enthält.

Beispielcode:

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

Können Sie die .contains() -Methode in der Liste aufrufen? – JustinKSU

+0

.contains() -Methode auf der Liste wird nach den Objekten, aber nicht nach den Eigenschaften der Objekte in der Liste suchen –

Antwort

1

Sie können über die folgende Funktionskarte zu List<String> (verwendet Java 8 Streams) alle Datenfolgen zu extrahieren

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

und verwenden Sie dann den everyItem/hasItem Funktion in Matchers Assertionen auf der resultierenden Liste von Zeichenfolgen zu machen:

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

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

Mit everyItem kann man behaupten, dass jedes Element in der Liste nicht „Nein“ ist und hasItem behauptet, dass es mindestens ein Element in der Liste mit dem Wert „Nein“ ist.


Alternativ könnten Sie eine feature matcher implementieren, um die Abbildungsfunktion zu vermeiden.

Verwandte Themen