2015-12-23 21 views
1

greather考慮:assertj如何在列表中選中某個屬性比的值

class Point { 
    int x; 
    int y; 
} 

List<Point> points; 

如何,我可以檢查,在點列表屬性x greather比的值?我的目標是類似於:後「」中提取

更新

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

但是我無法找到「isGreatherThan」

我的目的不是編寫自定義條件的這種價值檢查,因爲assertj已經有檢查數字的方法。

感謝

回答

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; 
    } 
}; 
+0

我正在尋找沒有定製條件的解決方案 – ejaenv

+0

祝你好運。 –

1

在Java 8,你可以做這樣的事情:

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

這對你想要的所有點有X> 20

要驗證有至少一個(在弗洛裏安Schaetz的答案)的情況下:

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

好主意,沒有想到Java 8的流作爲一種可能性。 –

+0

謝謝,但Lambdas是自定義條件。我的問題是,如果以某種方式,我可以使用assertj斷言,如isGreaterThan檢查列表中的數字。 – ejaenv

1

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

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

如果你想要做更復雜的東西,用Condition是要走的路,在AssertJ 3.X他們是簡單的寫,改寫弗洛裏安Schaetz例如:

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

謝謝,但Lambdas是自定義條件。我的問題是,如果以某種方式我可以使用assertj斷言,如isGreaterThan檢查列表中的數字 – ejaenv

+0

不,你不能這樣做。 –

相關問題