如何比较LISTS使用assertJ递归地忽略给定的字段?

问题描述:

首先,这不是this question的重复。在那里,它被特别要求提供一个对象。我想为Container执行此操作,特别是List。如何比较LISTS使用assertJ递归地忽略给定的字段?

所以,我知道我可以忽略一个字段时使用 usingElementComparatorIgnoringFields() 但是这不会做一个递归的比较。

我知道我可以使用usingRecursiveFieldByFieldElementComparator()。但是这不会让我排除一个给定的领域。

如何递归比较,忽略字段?

这将是在未来AssertJ Core版本:https://github.com/joel-costigliola/assertj-core/issues/1002

同时,你可以这样写:

assertThat(actualList) 
      .usingElementComparator(recursiveIgnoringComparator("excludedField1", "excludedField2", "excludedField3")) 
      .containsExactlyInAnyOrder(expectedList); 
} 

private Comparator<T> recursiveIgnoringFieldsComparator(String... fieldNames) { 
    final Map<String, Comparator<?>> comparatorByPropertyOrField = 
      Arrays.stream(fieldNames) 
        .collect(toMap(
          name -> name, 
          name -> (o1, o2) -> 0 
        )); 

    return new RecursiveFieldByFieldComparator(comparatorByPropertyOrField, new TypeComparators()); 
}