Проверка значений, извлеченных из коллекции, по сравнению с примитивным значением в 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, но это цена за что-то подобное...

Другие вопросы по тегам