我有一个成功通过测试的独立单例。但是对于一组测试,这是失败的,因为一旦定义了单例,它就不允许重置实例。
有没有关于如何去做的想法?
发布于 2010-02-02 05:09:25
不要使用单例。
具体地说,单例和全局变量之间的唯一区别是单例尝试强制执行单个实例(例如,通过将构造函数设为私有)。
取而代之的是,使构造函数成为公共的,并使用新实例编写测试。在您的实际程序中,使用getInstance()
获取规范的全局实例(或使用IOC容器)。
并记住singletons are pathological liars。
如果您仍然对Singleton的概念感到非常熟悉,那么您可以添加一个公共(和静态)工厂方法来创建实例,而不是将构造函数设为公共的,这样就不会被意外使用,例如:
public static MyClass TEST_CreateInstance() {
return new MyClass();
}
发布于 2010-01-30 15:53:31
我假设您的singleton类中有一个私有静态字段来存储初始化的实例。
如果你不想修改你的代码,你可以定义一个在每次测试后运行的teardown方法,在这个方法中,你可以通过反射将这个静态字段设置为null,就像看到的here一样。
发布于 2010-01-30 15:49:10
您可以添加一个方法来销毁单例,例如destroyMe();,您可以取消初始化所有内容,并将单例的实例设置为空。
public void destroyMe(){
this.instance = null;
//-- other stuff to turn it off.
}
不过,我将留下同步问题;)
但是为什么每次测试都需要重新初始化单例呢?它不应该因单例的概念而有所不同。
https://stackoverflow.com/questions/2167210
复制相似问题