使用PowerMockito模拟单例

Bio*_*eek 8 java testing junit4 mockito powermock

为了测试我编码的私有方法之一,我需要模拟一个Singleton.

在使用PowerMockito测试了几种方法之后:

PowerMockito.mockStatic(UtilDatabaseSoldeAutoCdeCommon.class);
Mockito.when(UtilDatabaseSoldeAutoCdeCommon.getInstance()).thenReturn(mockDatabase);
Run Code Online (Sandbox Code Playgroud)

我永远不会嘲笑这门课.因此,我不能像在每个方法中那样测试我的方法,我访问数据库.

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;
}

...
}
Run Code Online (Sandbox Code Playgroud)

我在调用getInstance()时调试了powermockito,但每次调用consructor时,它都会在尝试加载配置文件(不存在)时崩溃.

我确切地说,配置文件被定义为UtilDatabaseEnrichissement的absract父类中的常量,并在构造函数中使用.

我怎么测试这部分?

asc*_*sch 14

我认为这应该有效:

    @PrepareForTest({UtilDatabaseSoldeAutoCdeCommon.class})
    public class SomeTest {
        @Mock
        UtilDatabaseSoldeAutoCdeCommon fakeSingletonInstance;   

        @Test
        public void test() {
             Whitebox.setInternalState(UtilDatabaseSoldeAutoCdeCommon.class, "instance", fakeSingletonInstance);
             // Write here your test
        }
    }
Run Code Online (Sandbox Code Playgroud)


Sla*_*lny 0

PrepareForTest 您模拟的单例类