有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

具有列表成员的java Hamcrest assert复杂对象

如果我有POJO课程

  @Value
  @AllArgsConstructor
  class Person {
    private final String name;
    private final int age;
    private final List<Address> addresses;
  }

如您所见,该对象包含一个列表。在我的单元测试中,很难断言这一点,因为地址(或Person的任何其他潜在列表/集合/映射属性)的顺序是未知的

如何在不更改Person类的equals方法的情况下进行断言,并确保忽略地址的顺序?我在找像这样的东西

assertThat(actualPerson, is(expectedPerson).ignoreOrderingOf("addresses"));

我的意思是,在断言中应该忽略actualPerson.addressesexpectedPerson.addresses顺序

我通常应该使用什么测试策略来解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    您可以单独比较地址,如下所示:

    assertThat(actualPerson, samePropertyValuesAs(expectedPerson, "addresses"))
    assertThat(actualPerson.addresses, containsInAnyOrder(expectedPerson.addresses))
    

    第一个断言将比较除地址之外的所有属性,第二个断言将在忽略顺序的情况下比较地址