在AssertJ你可以做以下断言列表的内容:使用AssertJ,我如何对列表的内容执行复杂的断言?
assertThat(list).extracting("name").containsExactlyInAnyOrder("Alice", "Bob");
我经常发现自己想要做的元素本身,如更复杂的断言,断言Alice是一个高大的黑发和Bob很小很秃。 使用AssertJ执行此操作的最佳方法是什么?
我自己的解决办法是要做到:
assertThat(list).extracting("name").containsExactlyInAnyOrder("Alice", "Bob");
list.stream()
.filter(person -> "Alice".equals(person.getName()))
.forEach(alice -> {
assertThat(alice).extracting("size").isEqualTo("tall")
assertThat(alice).extracting("hair").isEqualTo("brunette")
});
list.stream()
.filter(person -> "Bob".equals(person.getName()))
.forEach(bob -> {
assertThat(bob).extracting("size").isEqualTo("tiny")
assertThat(bob).extracting("hair").isNull()
});
或等价(Java 7中):
assertThat(list).extracting("name").containsExactlyInAnyOrder("Alice", "Bob");
for(Person person : list){
switch (testCase.getName()){
case "Alice":
assertThat(person).extracting("size").isEqualTo("tall")
assertThat(person).extracting("hair").isEqualTo("brunette")
break;
case "Bob":
assertThat(person).extracting("size").isEqualTo("tiny")
assertThat(person).extracting("hair").isNull()
break;
}
}
但我想知道是否有更好的解决方案。
我喜欢这个解决方案区分列表中的预期元素和元素本身是正确的。
这是一个高度简化的例子。我主要遇到这种复杂断言的需要,大部分是当一个类包含一个集合时,我也想在这个内部集合上做断言。 – neXus