29

AssertJisEqualToIgnoringGivenFieldsisEqualToComparingFieldByFieldRecursively

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

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

4

2 回答 2

68

使用 AssertJ 版本 3.12.0 的最新“递归比较 api 改进”,现在可以进行递归比较并忽略字段:

Assertions.assertThat(objActual)
                .usingRecursiveComparison()
                .ignoringFields("uniqueId", "otherId")
                .ignoringFieldsMatchingRegexes(".*someId")
                .ignoringOverriddenEqualsForTypes(MyData.class, MyDataItem.class)
                .isEqualTo(objExpected);
于 2019-03-10T17:29:21.967 回答
8

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

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

这在2017 年 4 月 13 日存在问题。当比较器尝试比较的字段为空时,它不起作用。当一个对象null不是如果两个都是时,这是一个问题null

于 2017-04-13T07:27:41.487 回答