#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
Аннотации поступают из Ломбока.