java - 单例和单元测试

标签 java unit-testing singleton

Effective Java 有以下关于单元测试单例的声明

Making a class a singleton can make it difficult to test its clients, as it’s impossible to substitute a mock implementation for a singleton unless it implements an interface that serves as its type.

谁能解释为什么会这样?

最佳答案

您可以使用反射来重置您的单例对象,以防止测试相互影响。

@Before
public void resetSingleton() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
   Field instance = MySingleton.class.getDeclaredField("instance");
   instance.setAccessible(true);
   instance.set(null, null);
}

引用:unit-testing-singletons

关于java - 单例和单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8256989/

相关文章:

java - 迭代追加到 ObjectOutputStream

java - 指向同一对象的多个引用变量是否都占用与该对象相同的内存占用

java - Spring Scoped Proxy 适用于 Scoped Proxy Beans 字段的字段而不是 beans 本身?

Spring 单元测试和对象重新注入(inject)

java - 方法内的 Mockito 模拟对象

http - Flutter:单例数据,getter 在 null 上调用

JavaVM 警告 : JAWT_GetAWT must be called after loading a JVM

Python:为控制台打印编写单元测试

ios - 为什么我需要为音频创建一个共享实例?

java双重双重检查单例实例错误