比较几乎所有字段都相同的对象

时间:2018-03-15 14:16:35

标签: java unit-testing

在单元测试中,我通常使用

之类的东西
assertThat(someObject).isEqualTo(someOtherObject);

确保这两个对象具有相同的内容。但是,如果对象具有相同的内容某些字段外该怎么办?

通常会是这样的:

assertThat(someObject.getFirstField()).isNotEqualTo(someOtherObject.getFirstField());
assertThat(someObject.getLastField()).isNotEqualTo(someOtherObject.getLastFieldd());
// and then gazilion fields that should be equal
assertThat(someObject.getNthField()).isEqualTo(someOtherObject.getNthField());
// ...

由于显而易见的原因,对于具有大量字段的大型课程来说,它非常难以处理。有没有办法指定你期望某些字段不相等,但是等于?

someObject和someOtherObject都是与Lomboked相同的类,因此自动处理equals()。

1 个答案:

答案 0 :(得分:3)

如果您愿意使用assertJ,那么您的问题有一个非常简单的解决方案。使用

assertThat(someObject).isEqualToIgnoringGivenFields(someObjectOther, "firstField", "lastField")

请记住,这会在内部使用反射,如果您更改要忽略的类中字段的名称,则可能会发生故障。

有关此Field by field comparisons

的更多信息