2015-11-02 65 views
0

中檢查從集合中提取的對應於原始值的值我有這種情況,我需要集合中的所有對象都在字段中具有特定的布爾值。提取()似乎是一個很好的候選人。我能夠很容易地訪問該領域,但是當我想再次檢查它時,我無法找到在API中執行該操作的簡單方法。我來到的第一件事是以下幾點:在AssertJ

 SomeService someService = new SomeService(); 
     List<ClassA> llList = someService.getList(); 
     assertThat(llList).extracting("someBoolean") 
       .are(new Condition<Object>() { 
        @Override 
        public boolean matches(Object o) { 
         return Boolean.FALSE.equals(o); 
        } 
       }); 

這似乎是它是檢查我buffled,我找不到東西AssertJ API中更好,比如常見的事。爲了增強可讀性,我接下來做了以下內容:

assertThat(llList).extracting("someBoolean") 
       .are(createBooleanCondition(false)); 

public static Condition<Object> createBooleanCondition(boolean expected){ 
     return new Condition<Object>() { 
      @Override 
      public boolean matches(Object o) { 
       return new Boolean(expected).equals(o); 
      } 
     }; 
} 

有沒有表達這種說法與AssertJ一個更清潔的方式?

注:我可以使用java8 lambda來使這個更清潔,但我的問題是面向assertj,我也有硬規則,我需要這個在java 1.7中編譯。

回答

1

要檢查每個提取布爾值都是假的,我只想做:

assertThat(llList).extracting("someBoolean").containsOnly(Boolean.FALSE); 
0

一個很簡單的那種方式是...

assertThat(llList).filteredOn("someBoolean", Boolean.FALSE).isEmpty(); 

當然,這將需要AssertJ的側反射,但這是支付類似的價格...

+0

如果我正確地讀這一點,如果我需要的一切是假的,我需要通過Boolean.TRUE上filteredOn(...)。對? –

+0

我的不好,是的。它只是'filteredOn(fieldName,expectedValue)'。請參閱api文檔(版本2.x,對於java <8):http://joel-costigliola.github.io/assertj/core/api/org/assertj/core/api/AbstractIterableAssert.html#filteredOn%28java .lang.String,%20java.lang.Object%29 –

相關問題