为了测试我编写的私有(private)方法之一,我需要模拟一个 Singleton。
在使用 PowerMockito 测试了几种方法之后:
PowerMockito.mockStatic(UtilDatabaseSoldeAutoCdeCommon.class);
Mockito.when(UtilDatabaseSoldeAutoCdeCommon.getInstance()).thenReturn(mockDatabase);
我永远无法 mock 这门课。因此我无法像在每个方法中一样测试我的方法,我访问数据库。
UtilDatabaseSoldeAutoCdeCommon 定义如下:
public class UtilDatabaseSoldeAutoCdeCommon extends AbstractUtilDatabase {
private static UtilDatabaseSoldeAutoCdeCommon instance;
private UtilDatabaseSoldeAutoCdeCommon() {
super();
}
public static UtilDatabaseSoldeAutoCdeCommon getInstance() {
if(instance == null) {
instance = new UtilDatabaseSoldeAutoCdeCommon();
}
return instance;
}
...
}
我在调用 getInstance() 时调试了 powermockito,但每次调用 constructor 时,它都会在尝试加载配置文件(不存在)时崩溃。
我明确指出,配置文件在 UtilDatabaseEnrichissement 的抽象父类中被定义为一个常量,并在构造函数中使用。
我如何测试这部分?
最佳答案
我认为这应该可行:
@PrepareForTest({UtilDatabaseSoldeAutoCdeCommon.class})
public class SomeTest {
@Mock
UtilDatabaseSoldeAutoCdeCommon fakeSingletonInstance;
@Test
public void test() {
Whitebox.setInternalState(UtilDatabaseSoldeAutoCdeCommon.class, "instance", fakeSingletonInstance);
// Write here your test
}
}
关于java - 使用 PowerMockito 模拟单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37021702/