2016-03-22 2 views
1

Я использую asserThat для проверки свойств объектов в ArrayList.Как использовать AssertThat проверить значение свойства объектов в списке?

Я могу использовать assertThat, если ни один из объектов не содержит данные для тестирования, но я не могу понять, как использовать assert. Если только один из объектов содержит данные для тестирования.

Пример кода:

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 утверждает, что в списке есть хотя бы один элемент со значением «Нет».


В качестве альтернативы можно реализовать feature matcher, чтобы избежать функции отображения.