如何在Assertj Set集合中进行验证

时间:2019-02-01 10:30:29

标签: java testing assertj

我有返回记录列表的方法。每个记录都有“设置为”字段。

public class R {
    public final Set s;
}

我有所有预期组合的列表-如:​​

Set<String> set1 = new HashSet<String>(); set1.add("s1");
Set<String> set2 = new HashSet<String>(); set1.add("s2");
Set<String> set3 = new HashSet<String>(); set1.add("s3");

我想使用AssertJ(版本3.11.1)以简单的方式验证响应List<R>包含所有已定义的集合,或者至少这些集合中所有元素的聚合等于集合{{ 1}}

注意:以下解决方案不起作用

set1, set2, set3

我知道了

Set allElements = new HashSet<String>();
allElements.addAll(set1);
allElements.addAll(set2);
allElements.addAll(set3);

List<R> result = foo();
org.assertj.core.api.Assertions.assertThat(result)
    .extracting(record -> record.s)
    .containsOnly(allElements);

2 个答案:

答案 0 :(得分:0)

看起来像containsExactlyInAnyOrderElementsOf是答案

解决方案是:

Set<Set<String>> referralSet = new HashSet<>();
referralSet.add(set1);
referralSet.add(set2);
referralSet.add(set3);

org.assertj.core.api.Assertions.assertThat(result)
        .extracting(record -> record.s)
        .containsExactlyInAnyOrderElementsOf(referralSet);

答案 1 :(得分:0)

看起来像flatExtracting的用例,请尝试以下操作:

.assertThat(result).flatExtracting(record -> record.s)
                   .containsExactlyInAnyOrderElementsOf(referralSet);