我有一个类将单例实现为
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/