THM*_*THM 2 java testing assertj
我有返回记录列表的方法。每条记录都有设置为字段。
public class R {
public final Set s;
}
Run Code Online (Sandbox Code Playgroud)
我有所有预期集合的列表 - 例如:
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");
Run Code Online (Sandbox Code Playgroud)
我想使用 AssertJ (版本 3.11.1)以简单的方式验证响应List<R>
包含所有定义的 Set 或至少这些集合中所有元素的聚合等于集合中元素的聚合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);
Run Code Online (Sandbox Code Playgroud)
我有:
java.lang.AssertionError:
Expecting:
<[["s1.1", "s1.2"],
["s2.1", "s2.2"],
["s3.1", "s3.2"]]>
to contain only:
<[["s1.1",
"s1.2",
"s2.1",
"s2.2",
"s3.1",
"s3.2"]]>
Run Code Online (Sandbox Code Playgroud)
看起来就是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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9519 次 |
最近记录: |