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

2022-09-01 05:38:35

AssertJ有 和 。isEqualToIgnoringGivenFieldsisEqualToComparingFieldByFieldRecursively

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

如何仍然以递归方式比较我的断言的返回值,但忽略某些字段。是否可以在任何其他库中使用?或者我可以使用?AssertJ


答案 1

借助 AssertJ 3.12.0 版中最新的“递归比较 API 改进”,现在可以执行递归比较并忽略字段:

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

答案 2

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

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

截至2017年4月13日,该号为2017年4月13日。当比较器尝试比较的字段为 null 时,它不起作用。当其中一个对象不是时,如果两个对象都是 .nullnull


推荐