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

时间:2017-04-10 06:16:56

标签: java unit-testing assertj

AssertJisEqualToIgnoringGivenFieldsisEqualToComparingFieldByFieldRecursively

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

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

2 个答案:

答案 0 :(得分:7)

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

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

截至2017年4月13日,这个issueIt doesn't work当比较器试图比较的字段为空时。如果其中一个对象null,如果两者都是null,则会出现此问题。

答案 1 :(得分:6)

具有来自AssertJ版本3.12.0的最新“递归比较api改进” 现在可以进行递归比较并忽略字段:

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