【发布时间】:2012-05-09 06:34:34
【问题描述】:
我有一个工厂类来检索我的应用程序的配置:
public class ConfigurationFactory {
private static ConfigurationFactory configurationFactory = new ConfigurationFactory();
private Configuration configuration = null;
public static ConfigurationFactory getConfigurationFactory() {
return configurationFactory;
}
还有一些 getConfiguration 方法,具体取决于我从哪里获取配置(文件、数据库、默认值等...):
public Configuration getConfiguration(String path){...}
public Configuration getConfiguration(String database){...}
我的问题是,当我对每个方法进行单元测试时,我必须重新启动单例以便从不同的源加载,所以我唯一想到的就是添加这个:
public void resetConfiguration() {
this.configuration = null;
}
而且我觉得我会因为这样做而在开发者的地狱中燃烧:)
我的问题:有没有其他方法可以在不添加此方法的情况下做到这一点?
注意:我见过this,我不能使用像 Spring 或 Guice 这样的任何 DI 框架,管理层认为添加框架会使项目变得重量级,因为该程序旨在作为服务器上的守护进程运行。
【问题讨论】:
-
重置实例是测试单例时的一种方式,因为它们总是很难测试并且没有任何好的方法。有时这类问题意味着在你的设计中有一些可以重构的东西。你会考虑重构吗?
-
是的,但是,我该如何重构它呢?我的意思是,我花了一些时间寻找最好的方法,而单例工厂似乎是一个很好的模式,它确实以一种清晰的方式完成了工作。我唯一的问题是测试,但我不想重构整个事情只是为了适应 jUnit 测试......
-
我将单元测试视为代码质量计量器。如果我遇到无法测试的东西,我倾向于重构那段代码。但是,当然,这是你的代码,如果这个可测试性问题不困扰你,重置实例就可以了。例如,您是否看过抽象工厂设计模式?我认为这应该更可测试......