AssertJ проверяет, не пуст ли список объектов с полем списка

#assertj

#assertj

Вопрос:

Пример:

 public class Office {
  List<Employee> employee;
}
  

Как мне утверждать, что в моем List<Office> offices нет ни одного без сотрудников? Возможно ли утверждать это с помощью одной цепочки утверждений?

Ответ №1:

Если я правильно понимаю ваш вопрос, вы хотите проверить, что во всех офисах есть сотрудник, если это так allSatisfy , можно использовать как:

 assertThat(offices).allSatisfy(office -> {
                              assertThat(office.employee).isNotEmpty();
                            });
  

Кстати, также доступно noneSatisfy утверждение.

Комментарии:

1. Прежде чем вы ответили, я пошел с .doesNotHave(new Condition<>(CollectionUtils::isEmpty, "Empty Employees") . Есть ли какая-либо причина, по которой нет метода, который принимает предикат? Что-то вроде: .allSatisfy(CollectionUtils::isNotEmpty) Спасибо.

2. есть один: allMatch

Ответ №2:

Вы могли бы решить это с помощью allSatisfy повторяющегося утверждения, как показано в следующем примере:

     @Test
    public void assertInnerPropertyInList() {
        List<Office> officesWithEmptyOne = List.of(
                new Office(List.of(new Employee(), new Employee())),
                new Office(List.of(new Employee())),
                new Office(List.of()));

        List<Office> offices = List.of(
                new Office(List.of(new Employee(), new Employee())),
                new Office(List.of(new Employee())));

        // passes
        assertThat(offices).allSatisfy(office -> assertThat(office.getEmployee()).isNotEmpty());

        // fails
        assertThat(officesWithEmptyOne).allSatisfy(office -> assertThat(office.getEmployee()).isNotEmpty());
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Office {
        private List<Employee> employee;
    }

    @Data
    @AllArgsConstructor
    public class Employee {
    }
  

И вы можете видеть, что второе утверждение завершается ошибкой с сообщением:

 java.lang.AssertionError: 
Expecting all elements of:
  <[AssertJFeatureTest.Office(employee=[AssertJFeatureTest.Employee(), AssertJFeatureTest.Employee()]),
    AssertJFeatureTest.Office(employee=[AssertJFeatureTest.Employee()]),
    AssertJFeatureTest.Office(employee=[])]>
to satisfy given requirements, but these elements did not:

  <AssertJFeatureTest.Office(employee=[])> 
Expecting actual not to be empty
  

Аннотации поступают из Ломбока.