2015-11-02 53 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 –

相关问题