AssertJ
有isEqualToIgnoringGivenFields
和isEqualToComparingFieldByFieldRecursively
。
但是,我无法通过忽略某些字段来递归地比较两个对象。根据这个讨论,它必须在开发中。
如何仍然让我的断言返回值进行递归比较但忽略某些字段。是否可以在任何其他库中使用,或者我可以以某种方式使用它AssertJ
吗?
AssertJ
有isEqualToIgnoringGivenFields
和isEqualToComparingFieldByFieldRecursively
。
但是,我无法通过忽略某些字段来递归地比较两个对象。根据这个讨论,它必须在开发中。
如何仍然让我的断言返回值进行递归比较但忽略某些字段。是否可以在任何其他库中使用,或者我可以以某种方式使用它AssertJ
吗?
使用 AssertJ 版本 3.12.0 的最新“递归比较 api 改进”,现在可以进行递归比较并忽略字段:
Assertions.assertThat(objActual)
.usingRecursiveComparison()
.ignoringFields("uniqueId", "otherId")
.ignoringFieldsMatchingRegexes(".*someId")
.ignoringOverriddenEqualsForTypes(MyData.class, MyDataItem.class)
.isEqualTo(objExpected);
我无法让它忽略某些字段,但我设法通过为我想忽略的字段引入一个比较器来暂时解决它,并始终将它们评估为真。这不是流利的,而是完成工作的临时解决方案。
assertThat(object).usingComparatorForFields((x,y)->0,"field1","field2").isEqualToComparingFieldByFieldRecursively(expectedObject);
这在2017 年 4 月 13 日存在问题。当比较器尝试比较的字段为空时,它不起作用。当一个对象null
不是如果两个都是时,这是一个问题null
。