我通常将类的每个属性设置为final(仅适用于将在构造函数中初始化的属性)。
关键是我现在正在实现对象的模型以进行测试。此模型扩展了它正在模拟的类,并且该类具有一些最终属性。因此,我不得不在Mockup对象的构造函数中调用super()构造函数。但是,这破坏了Mockup的实用程序,因为我不希望它以普通类的方式初始化所有属性。我宁愿调用Mockup构造函数而不调用super()并做我想做的任何事情。
我的问题是:将属性定义为final是一个好习惯,只要它们会迫使您在Mockup中调用类构造函数?
编辑:我添加一些代码。在这种情况下的问题是我正在使用单例,我知道在测试时这不是一个好主意,但是在这种情况下我无法更改它。因此,我的目的不是在Mockup中调用此方法。
public class ReportsDataManager {
private final Map<String, List<String>> translations;
public ReportsDataManager() {
this.translations = GenericUtils.getTranslation();
}
}
最佳答案
如果您想模拟该类,请给它一个接口并模拟该接口。另外,mocks aren't stubs。听起来您是在创建存根,而不是模拟。
如果您确实想创建一个模拟,请选择一个为您的接口生成模拟的库。