我有一个简单的复制/ clone方法那就是我的应用程序重要:如何在添加新字段时避免破解克隆/复制方法?
@Override
public Operation getCopy() {
Operation copy = new Operation();
copy.year = this.year;
copy.stage = this.stage;
copy.info = this.info;
copy.user = this.user.getCopy();
// NOT TO BE COPIED! copy.id = this.id;
...
return copy;
}
注意,有一些不应该被复制了一些具体领域。还有一些复杂的对象(如用户)有自己的复制方法。
的问题是,由于新代码开发的,有时开发人员创建应该复制一个新的领域,但他忘了将它添加到copy
方法:
private String additionalInfo;
而且即使没有一个编译错误,这是一个业务问题,只有我们的QA团队甚至用户才会发现。
我能做些什么来防止这种情况发生?我已经尝试过使用原始对象和其副本进行比较的JUnit测试,并且它们适用于现有字段,但它们不占用新字段。
面对变化,这种方法极其不稳定。测试'assertEquals(复制,原始,“复制失败”);'通常就足够了。 –
@LewBloch,除了依赖equals检查所有的字段。 –
只有那些需要建立平等的人。如果这个状态是由其他领域决定的,那么他们应该用“等”来解释。 –