当前位置: 首页 > 知识库问答 >
问题:

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

爱唯
2023-03-14

在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()
    });
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;
    }
}

共有1个答案

章子航
2023-03-14

对于过滤,您可以直接使用任何风格的filteredOn,然后使用allMatch或AllSetfist(当我直接说的时候,我的意思是不需要流式收集来过滤它)。

我建议您使用AssertJ API,您可以使用其他断言,如AnySessist,或者使用条件和方法,如areareat至少,...绝大多数API都有javadoc并举例说明如何使用它。

此外,还可以查看assertj-examples项目中的示例。

 类似资料:
  • null 编辑:一个附加的非功能性需求是,测试应该可以很容易地通过附加的约束来扩展。在Hamcrest中,表达附加约束是相当容易的,例如。 依赖于列表索引的测试必须重新编号。在本例中,使用自定义条件的测试必须重写完整的条件(请注意,中的约束不限于子字符串检查)。

  • 我有一个gprsEvents列表,其中列表中的每个元素都是一个映射 ,如下所示。我需要: null 我开始考虑使用Java8Stream(groupingBy):gprsents.stream().collectors.groupingBy(Map->map.Get(“CallChargingID”).ToString())) 我现在坚持得到合适的结果,特别是在一个单一的地图和上面提到的字段的列表

  • 很抱歉标题太长,但我的问题如下; 我有这些课程; 和 和 如果只有断言它拥有的列表,我会使用以下自定义匹配器;

  • 如何拆分列表并并行执行 我的场景-- 我从webservices获得了1000辆使用下面列表的车辆。 我想在每个列表中分割100辆车并并行执行所有列表。 谢谢

  • 问题内容: 我有登录屏幕的GUI。每当我按下登录按钮时,都会对照在线mysql数据库中的输入检查用户名和密码,我正在通过登录按钮的actionPerformed()方法从数据库中提取所有这些信息。问题是程序正在从数据库中获取数据时, GUI冻结。我搜索了我的问题,发现我应该使用SwingWorker,但是作为一个新手,我没有获得如何使用SwingWorker的目的。 问题答案: 首先,在您的类中声