无法模拟私有枚举构造函数。
请在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();
}
}