gpt4 book ai didi

java - 使用 AssertJ,如何对列表的内容执行复杂的断言?

转载 作者:行者123 更新时间:2023-12-05 09:17:47 25 4
gpt4 key购买 nike

在 AssertJ 中,您可以执行以下操作来断言列表的内容:

assertThat(list).extracting("name").containsExactlyInAnyOrder("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;
}
}

但我想知道是否有更好的解决方案。

我喜欢这个解决方案区分列表中的预期元素和元素本身是否正确这一事实。

最佳答案

对于过滤,你可以直接使用filteredOn的任何一种风格, 然后 allMatchallSatisfy (当我直接说时,我的意思是不需要流式传输您的 Collection 以对其进行过滤)。

我建议探索 AssertJ API,您还有其他断言,例如 anySatisfy或使用 conditions使用 areareAtLeast 等方法......绝大多数 API 都有 javadoc 和示例来展示如何使用它。

此外,您还可以查看 examples在 assertj-examples 项目中。

希望对你有帮助

关于java - 使用 AssertJ,如何对列表的内容执行复杂的断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46790838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com