AssertJ
有isEqualToIgnoringGivenFields
和isEqualToComparingFieldByFieldRecursively
。
但是,我无法通过忽略某些字段来递归地比较两个对象。根据{{3}}讨论,它必须正在开发中。
如何仍然让我的断言的返回值以递归方式进行比较但忽略某些字段。是否可以在任何其他库中使用,或者我可以使用AssertJ
以某种方式执行此操作吗?
答案 0 :(得分:7)
我无法忽略某些字段,但我设法通过为我想忽略的字段引入比较器来暂时解决它,并始终将它们评估为true。这不是流利的,而是完成工作的临时解决方案。
assertThat(object).usingComparatorForFields((x,y)->0,"field1","field2").isEqualToComparingFieldByFieldRecursively(expectedObject);
截至2017年4月13日,这个issue。It 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);