为了测试我编码的私有(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
        }
    }

07-26 06:03