为了测试我编码的私有(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;
}
...
}
我在调用powerInstance调用getInstance()时进行了调试,但是每次调用consructor时,它在尝试加载配置文件(不存在)时崩溃。
我精确地将配置文件在UtilDatabaseEnrichissement的抽象父类中定义为常量,并在构造函数中使用。
我如何测试这部分?
最佳答案
我认为这应该工作:
@PrepareForTest({UtilDatabaseSoldeAutoCdeCommon.class})
public class SomeTest {
@Mock
UtilDatabaseSoldeAutoCdeCommon fakeSingletonInstance;
@Test
public void test() {
Whitebox.setInternalState(UtilDatabaseSoldeAutoCdeCommon.class, "instance", fakeSingletonInstance);
// Write here your test
}
}