java - 构造函数抑制无法与 PowerMock+Mockito 一起使用

标签 java junit mockito powermock

我有一个类将单例实现为

public class UMR {

private static UMR umr =  new UMR();

private MR mr;

private UMR(){
    this.mr = MR.getInstance();
}

public static UMR getInstance() {
    return umr;
}

}

这是我的测试方法代码

@Test
public void test(){

    suppress(constructor(UMR.class));   

    mockStatic(UMR.class);

    UMR umr = PowerMockito.mock(UMR.class);

    when(UMR.getInstance()).thenReturn(umr);    

    System.out.println("End");

}

使用的注释和导入:

import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;
import static org.powermock.api.support.membermodification.MemberMatcher.constructor;
import static org.powermock.api.support.membermodification.MemberModifier.suppress;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest({UMR.class})

我不希望调用私有(private)构造函数,但即使在第一个语句中成功抑制构造函数后,它仍然调用构造函数。

如果我做错了什么,请提出建议。

最佳答案

该行中的构造函数在构造函数被抑制之前被调用。

private static UMR umr =  new UMR()

在这种情况下,您必须使用@SuppressStaticInitializationFor

关于java - 构造函数抑制无法与 PowerMock+Mockito 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36358668/

相关文章:

java全局变量无法更改android studio

java - getDeclaredMethods 获取 NoClassDefFoundError

mysql - 如何验证测试中的项目列表

java - 错误 :Invalid use of argument matchers! 预计有 0 个匹配器,已记录 1 个

java - 使用 Mockito 对流畅的界面进行单元测试

java - 如何避免运行我的程序 10 次以获得 10 个答案?

Java读入单个文件并写出多个文件

spring-boot - 单元测试 - Wiremock 验证失败并出现连接错误

file - 如何在 scala 的 specs2 测试中使用 jUnit 的 TemporaryFolder?

android - 如何使用 Mockito 在 android 中模拟 EditText