首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用JUnit测试的不同单例实例

使用JUnit测试的不同单例实例
EN

Stack Overflow用户
提问于 2010-01-30 15:40:56
回答 6查看 20K关注 0票数 27

我有一个成功通过测试的独立单例。但是对于一组测试,这是失败的,因为一旦定义了单例,它就不允许重置实例。

有没有关于如何去做的想法?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-02-02 05:09:25

不要使用单例。

具体地说,单例和全局变量之间的唯一区别是单例尝试强制执行单个实例(例如,通过将构造函数设为私有)。

取而代之的是,使构造函数成为公共的,并使用新实例编写测试。在您的实际程序中,使用getInstance()获取规范的全局实例(或使用IOC容器)。

并记住singletons are pathological liars

如果您仍然对Singleton的概念感到非常熟悉,那么您可以添加一个公共(和静态)工厂方法来创建实例,而不是将构造函数设为公共的,这样就不会被意外使用,例如:

代码语言:javascript
复制
public static MyClass TEST_CreateInstance() {
  return new MyClass();
}
票数 15
EN

Stack Overflow用户

发布于 2010-01-30 15:53:31

我假设您的singleton类中有一个私有静态字段来存储初始化的实例。

如果你不想修改你的代码,你可以定义一个在每次测试后运行的teardown方法,在这个方法中,你可以通过反射将这个静态字段设置为null,就像看到的here一样。

票数 19
EN

Stack Overflow用户

发布于 2010-01-30 15:49:10

您可以添加一个方法来销毁单例,例如destroyMe();,您可以取消初始化所有内容,并将单例的实例设置为空。

代码语言:javascript
复制
  public void destroyMe(){
   this.instance = null;
   //-- other stuff to turn it off.
}

不过,我将留下同步问题;)

但是为什么每次测试都需要重新初始化单例呢?它不应该因单例的概念而有所不同。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2167210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档