【发布时间】:2013-02-13 03:42:03
【问题描述】:
我通常将类的每个属性设置为 final(仅适用于将在构造函数中初始化的属性)。 关键是我现在正在实现一个对象的模型以用于测试目的。这个 Mockup 扩展了它正在模拟的类,并且这个类有一些最终属性。因此我不得不在 Mockup 对象的构造函数中调用 super() 构造函数。然而,这破坏了 Mockup 的实用性,因为我不希望它以普通类的方式初始化所有属性。我宁愿调用 Mockup 构造函数而不调用 super() 并做任何我想做的事情。
我的问题是:将属性定义为 final 是否是一种好习惯,只要它们会强制您在 Mockup 中调用类构造函数?
编辑:我添加了一些代码。这种情况下的问题是我使用的是单例,我知道在测试时这不是一个好主意,但在这种情况下我无法更改它。所以我的意图不是在 Mockup 中调用这个方法。
public class ReportsDataManager {
private final Map<String, List<String>> translations;
public ReportsDataManager() {
this.translations = GenericUtils.getTranslation();
}
}
【问题讨论】:
-
你能发布一些 SUT 的代码和预期的测试吗?将导致测试所需状态的公共呼叫/消息(发布到被测班级时)的顺序是什么?您不必在外部操作 SUT 的私有变量。
-
"但在这种情况下我无法更改它。"更改! ;) stackoverflow.com/questions/2925459/…
-
被测类是什么样的?它如何使用 ReportsDataManager?
-
你说得对,我应该改变它,但即使我删除了 Singletone,我仍然会遇到问题。只是猜测 this.translations 以我不喜欢模拟的方式初始化......
标签: java unit-testing mocking final