java - 使用 PowerMockito 模拟单例

标签 java testing mockito junit4 powermock

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

相关文章:

java - 或 selenium xpath 中的条件

java - 删除 android 数据库后 getReadableDatabase() 不会创建新数据库

java - Joda-Time DateTimeZone 比较不正确

java.lang.NoSuchMethodError : javax. servlet.http.HttpServletRequest.getPart(Ljava/lang/String;)Ljavax/servlet/http/Part;

java - 在没有源代码的情况下对 Swing 应用程序进行自动化 UAT/功能测试

java - 尝试使用 Mockito 进行监视时出现异常

testing - Erlang 测试套件

ruby-on-rails - capybara 找不到元素的位置

android - 模拟对象仍在调用方法(Mockito + Kotlin)

java - Mockito/Realm (何时-那么): how to pass arguments from method to its submethod