在单元测试中,我通常使用
之类的东西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()。
答案 0 :(得分:3)
如果您愿意使用assertJ,那么您的问题有一个非常简单的解决方案。使用
assertThat(someObject).isEqualToIgnoringGivenFields(someObjectOther, "firstField", "lastField")
请记住,这会在内部使用反射,如果您更改要忽略的类中字段的名称,则可能会发生故障。
的更多信息