断言如何在列表中检查属性是否比值大

时间:2015-12-23 02:05:18

标签: assertj

假设:

class Point {
    int x;
    int y;
} 

List<Point> points;

如何检查Points列表中的属性x是否比值大?我的目标类似于:

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

然而,在'提取'之后我找不到'isGreatherThan'

更新

我不打算为这种值检查编写自定义条件,因为assertj已经有了检查数字的方法。

由于

3 个答案:

答案 0 :(得分:2)

您可以使用filteredOn,因为它支持java 8 Predicate,例如:

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

如果你想做更复杂的事情,使用Condition是可行的方法,在AssertJ 3.x中它们更容易编写,重写Florian Schaetz的例子:

Condition<Integer> greaterThan20 = new Condition<>(v -> v.intValue() > 20, "greater than 20");

答案 1 :(得分:1)

在Java 8中,您可以执行以下操作:

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

这就是你希望所有点都有x&gt;的情况。 20。

验证至少有一个(如Florian Schaetz的答案):

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

答案 2 :(得分:0)

你可以试试这个......

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

当然你需要write the condition yourself,比如......

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

  @Override
  public boolean matches(Integer value) {
    return value.intValue() > 20;
  }
};