Проверка значений, извлеченных из коллекции, по сравнению с примитивным значением в AssertJ
У меня был этот случай, когда мне нужно, чтобы все объекты в коллекции имели определенное логическое значение в поле. extracting() показался мне очень хорошим кандидатом для этого. Я смог довольно легко "получить доступ" к полю, но когда мне захотелось снова проверить его значение, я не смог найти чистый способ сделать это в API. Первое, что я придумал, было следующее:
SomeService someService = new SomeService();
List<ClassA> llList = someService.getList();
assertThat(llList).extracting("someBoolean")
.are(new Condition<Object>() {
@Override
public boolean matches(Object o) {
return Boolean.FALSE.equals(o);
}
});
Кажется, что это настолько распространенная вещь, чтобы проверить, что я в замешательстве, что я не могу найти что-то лучшее в AssertJ API. Чтобы улучшить читабельность, я сделал следующее:
assertThat(llList).extracting("someBoolean")
.are(createBooleanCondition(false));
public static Condition<Object> createBooleanCondition(boolean expected){
return new Condition<Object>() {
@Override
public boolean matches(Object o) {
return new Boolean(expected).equals(o);
}
};
}
Есть ли более чистый способ выразить такое утверждение с помощью AssertJ?
ПРИМЕЧАНИЕ: я мог бы использовать лямбду java8, чтобы сделать это чище, но мой вопрос направлен на assertj, и у меня также есть жесткое правило, что мне нужно это для компиляции в Java 1.7.
2 ответа
Чтобы проверить, что все извлеченные логические значения являются ложными, я бы просто сделал:
assertThat(llList).extracting("someBoolean").containsOnly(Boolean.FALSE);
Довольно простой способ для этого...
assertThat( llList ).filteredOn( "someBoolean", Boolean.FALSE ).isEmpty();
Конечно, это потребует размышлений со стороны AssertJ, но это цена за что-то подобное...