assertj, как проверить в списке, что свойство лучше, чем значение

Данный:

class Point {
    int x;
    int y;
} 

List<Point> points;

Как я могу проверить, что свойство x в списке точек больше, чем значение? Я стремлюсь к чему-то похожему:

assertThat(points).extracting("x").isGreatherThan(20)

Однако я не могу найти isGreatherThan после извлечения

Обновить

Я не стремлюсь писать собственные условия для такого рода проверки значений, поскольку assertj уже имеет методы проверки чисел.

Спасибо


person ejaenv    schedule 23.12.2015    source источник


Ответы (3)


Вы можете использовать filteredOn, поскольку он поддерживает java 8 Predicate, например:

assertThat(listOfPoints).filteredOn(p -> p.x > 20).isNotEmpty();

Если вы хотите делать более сложные вещи, используйте Condition, в AssertJ 3.x их проще написать, переписав пример Флориана Шетца:

Condition<Integer> greaterThan20 = new Condition<>(v -> v.intValue() > 20, "greater than 20");
person Joel Costigliola    schedule 23.12.2015
comment
спасибо, но лямбды - это особые условия. Мой вопрос в том, могу ли я каким-то образом использовать утверждения assertj, такие как isGreaterThan, для проверки чисел в списке - person ejaenv; 24.12.2015
comment
Нет, ты не можешь этого сделать. - person Joel Costigliola; 30.12.2015

В Java 8 вы можете сделать что-то вроде этого:

assertThat(listOfPoints.stream().filter(p->p.x > 20).toArray()).hasSameSizeAs(listOfPoints);

Это для случая, когда вы хотите, чтобы ВСЕ точки имели x> 20.

Чтобы убедиться, что есть хотя бы один (как в ответе Флориана Шетца):

assertThat(listOfPoints.stream().filter(p->p.x > 20).toArray()).isNotEmpty();
person aro_tech    schedule 23.12.2015
comment
Хорошая идея, не думал о потоках Java 8 как о возможности. - person Florian Schaetz; 23.12.2015
comment
спасибо, но лямбды - это особые условия. Мой вопрос в том, могу ли я каким-то образом использовать утверждения assertj, такие как isGreaterThan, для проверки чисел в списке. - person ejaenv; 24.12.2015

Вы можете попробовать это ...

.extracting( "x", Integer.class ).areAtLeast( 1, greaterThan20 );

Конечно, вам придется написать условие самостоятельно, что-нибудь как...

final Condition<Integer> greaterThan20 = new Condition<Integer>("greater than 20") {

  @Override
  public boolean matches(Integer value) {
    return value.intValue() > 20;
  }
};
person Florian Schaetz    schedule 23.12.2015
comment
Искал решение без нестандартных условий - person ejaenv; 23.12.2015