PowerMock枚举私有构造函数模拟

时间:2018-09-20 08:32:18

标签: java powermock powermockito

无法模拟私有枚举构造函数。

请在MySingleton枚举下找到带有私有构造函数的枚举,在此构造函数中,我正在创建可以进行远程调用的服务。在我的测试中,我想模拟此构造函数,以便在junit执行中,我的测试不会连接远程服务器。

使用powermock模拟枚举构造函数。我能够使用powermock的Whitebox类注入枚举实例。调用模拟实例时也能够获得模拟服务。

使用 whenNew(MySingleton.class).withAnyArguments()。thenReturn(instance)来模拟私有构造函数的调用,但是enum的私有构造函数没有得到模拟,并且测试正在尝试连接到远程服务。

如何在枚举中模拟私有构造函数的调用?

public enum MySingleton {
Instance;

private MyService service

private MySingleton () {
  // service initialization. service connect to remote server
  service = new MyService();
  System.out.println("Constructor Invoke");
}

public Myservice getService() {

return service;
}

}

public class DriverClass {

public void initService() 
 {
  MySingleton.Instance.getService();

 }

}

@RunWith(PowerMockRunner.class)
@PrepareForTest(MySingleton.class)
public class DriverClassTest {

@Mock private Myservice service;
private MySingleton instance;

@before
public void setup() {
instance = mock(MySingleton.class);
Whitebox(MySingleton.class,"Instance",instance);
whenNew(MySingleton.class).withAnyArguments().thenReturn(instance);
}

@test
public void testInitSerice()
 {
when(instance.getService()).thenReturn(service);

new DriverClass().initService();

}

}

0 个答案:

没有答案