0

我有这种情况,我需要集合中的所有对象在字段中具有特定的布尔值。extracting() 似乎是一个非常好的候选者。我能够很容易地“访问”该字段,但是当我想再次检查它的值时,我无法在 API 中找到一种干净的方法来完成它。我想到的第一件事是:

        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);
                    }
                });

这似乎是很常见的事情,检查我是否在 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 中编译它。

4

2 回答 2

1

要检查每个提取的布尔值是否为假,我只需执行以下操作:

assertThat(llList).extracting("someBoolean").containsOnly(Boolean.FALSE);
于 2015-11-02T19:11:19.970 回答
0

一个非常简单的方法是......

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

当然,这需要 AssertJ 方面的反思,但这是为这样的事情付出的代价......

于 2015-11-02T14:24:23.190 回答