Приватный конструктор PowerMock Enum - PullRequest
0 голосов
/ 20 сентября 2018

Невозможно смоделировать приватный конструктор enum.

Ниже приведено перечисление MySingleton с приватным конструктором, в этом конструкторе я создаю сервис, который выполняет удаленный вызов.В моем тесте я хочу смоделировать этот конструктор, чтобы при выполнении junit мой тест не подключался к удаленному серверу.

Использование powermock для макета конструктора enum.Я могу ввести экземпляр enum, используя класс Powermock Whitebox.Также можно получить фиктивный сервис при вызове фиктивного экземпляра.

Чтобы имитировать вызов частного конструктора, используя whenNew (MySingleton.class) .withAnyArguments (). ThenReturn (instance) , но закрытый конструкторenum не работает, и test пытается подключиться к удаленному сервису.

Как смоделировать вызов частного конструктора в 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();

}

}
...