使用JUnit测试的不同Singleton实例

kal*_*kal 23 junit singleton

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

关于如何解决这个问题的任何想法?

Csa*_*a_H 14

我假设你的单例类中有一个私有静态字段来存储初始化的实例.

如果你不想修改代码,您可以定义每个测试后运行一个拆卸方法,并在此方法设置此静态字段通过反射null作为看到这里.

  • 给出实际解决方案的+1.我无法控制第三方代码,这是一个单独的代码,需要解决方案,不建议如何完成. (15认同)

ori*_*rip 13

不要使用单身人士.

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

相反,使构造函数公开并使用新实例编写测试.在您的实际程序中,用于getInstance()获取规范的全局实例(或使用IOC容器).

请记住,单身人士是病态的骗子.

如果你仍然对Singleton的想法感到满意,而不是公开构造函数,你可以添加一个公共(和静态)工厂方法,以不会意外使用的方式创建实例,例如:

public static MyClass TEST_CreateInstance() {
  return new MyClass();
}
Run Code Online (Sandbox Code Playgroud)