1

鉴于:

class Point {
    int x;
    int y;
} 

List<Point> points;

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

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

但是我在“提取”后找不到“isGreatherThan”

更新

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

谢谢

4

3 回答 3

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");
于 2015-12-23T20:47:58.417 回答
1

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

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

这适用于您希望所有点的 x > 20 的情况。

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

assertThat(listOfPoints.stream().filter(p->p.x > 20).toArray()).isNotEmpty();
于 2015-12-23T13:37:20.750 回答
0

你可以试试这个...

.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;
  }
};
于 2015-12-23T10:31:38.133 回答