在AssertJ中检查从Collection中提取的值与原始值

时间:2015-11-02 14:12:35

标签: java unit-testing junit assertj

我有这种情况,我需要集合中的所有对象在字段中都有一个特定的布尔值。 extract()似乎是一个非常好的候选人。我能够非常轻松地“访问”该字段,但是当我想再次检查它时,我无法在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中编译。

2 个答案:

答案 0 :(得分:1)

要检查每个提取的布尔值是否为假,我只会这样做:

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

答案 1 :(得分:0)

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

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

当然,这需要在AssertJ方面进行反思,但这是付出类似代价的代价......