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

How to compare recursively ignoring given fields using assertJ?

AssertJisEqualToIgnoringGivenFieldsisEqualToComparingFieldByFieldRecursively

但是,我无法通过忽略某些字段来递归地比较两个对象。根据 this 讨论,它必须在开发中。

如何仍然让我的断言的 return 值进行递归比较但忽略某些字段。是否可以在任何其他库中使用 AssertJ?

我无法让它忽略某些字段,但我通过为我想忽略的字段引入比较器并始终将它们评估为真来设法暂时解决了这个问题。这不是流利的,而是完成工作的临时解决方案。

assertThat(object).usingComparatorForFields((x,y)->0,"field1","field2").isEqualToComparingFieldByFieldRecursively(expectedObject);

当比较器尝试比较的字段为空时,这有一个 issue as of April 13, 2017. 。这是一个问题,当其中一个对象是 null 时,如果两者都是 null.

,则不是

来自 AssertJ 3.12.0 的最新 'Recursive comparison api improvements' 现在可以进行递归比较并忽略字段:

Assertions.assertThat(objActual)
                .usingRecursiveComparison()
                .ignoringFields("uniqueId", "otherId")
                .ignoringFieldsMatchingRegexes(".*someId")
                .ignoringOverriddenEqualsForTypes(MyData.class, MyDataItem.class)
                .isEqualTo(objExpected);