2017-06-22 112 views
0

首先,這不是this question的重複。在那裏,它被特別要求提供一個對象。我想爲Container執行此操作,特別是List。如何比較LISTS使用assertJ遞歸地忽略給定的字段?

所以,我知道我可以忽略一個字段時使用 usingElementComparatorIgnoringFields() 但是這不會做一個遞歸的比較。

我知道我可以使用usingRecursiveFieldByFieldElementComparator()。但是這不會讓我排除一個給定的領域。

如何遞歸比較,忽略字段?

回答

0

同時,你可以這樣寫:

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