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

问题描述 投票:3回答:2

AssertJisEqualToIgnoringGivenFieldsisEqualToComparingFieldByFieldRecursively

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

如何仍然让我的断言的返回值以递归方式进行比较,但忽略了一些字段。是否有可能在任何其他图书馆或我可以使用AssertJ以某种方式做到这一点?

java unit-testing assertj
2个回答
7
投票

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

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

这个issue截至2017年4月13日.It doesn't work当比较器试图比较的字段为空时。当一个对象是null而不是两个都是null时,这是一个问题。


7
投票

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

Assertions.assertThat(objActual)
                .usingRecursiveComparison()
                .ignoringFields("uniqueId", "otherId")
                .ignoringFieldsMatchingRegexes(".*someId")
                .ignoringOverriddenEqualsForTypes(MyData.class, MyDataItem.class)
                .isEqualTo(objExpected);
© www.soinside.com 2019 - 2024. All rights reserved.