鉴于:
class Point {
int x;
int y;
}
List<Point> points;
如何检查点列表中的属性 x 是否大于值?我的目标类似于:
assertThat(points).extracting("x").isGreatherThan(20)
但是我在“提取”后找不到“isGreatherThan”
更新
我不打算为这种值检查编写自定义条件,因为 assertj 已经有检查数字的方法。
谢谢
鉴于:
class Point {
int x;
int y;
}
List<Point> points;
如何检查点列表中的属性 x 是否大于值?我的目标类似于:
assertThat(points).extracting("x").isGreatherThan(20)
但是我在“提取”后找不到“isGreatherThan”
更新
我不打算为这种值检查编写自定义条件,因为 assertj 已经有检查数字的方法。
谢谢
您可以使用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");
在 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();
你可以试试这个...
.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;
}
};