假设:
class Point {
int x;
int y;
}
List<Point> points;
如何检查Points列表中的属性x是否比值大?我的目标类似于:
assertThat(points).extracting("x").isGreatherThan(20)
然而,在'提取'之后我找不到'isGreatherThan'
更新
我不打算为这种值检查编写自定义条件,因为assertj已经有了检查数字的方法。
由于
答案 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;
}
};