Проблема при Mocking BindingProvider и сгенерированных классах-заглушках - PullRequest
0 голосов
/ 05 мая 2020

Я использую классы, созданные веб-сервисом JAX-WS, или, можно сказать, прокси и заглушки. Мне нужно преобразовать этот прокси в интерфейс BindingProvider, чтобы установить конечную точку во время выполнения. (К сожалению, созданный интерфейс прокси не расширяет интерфейс BindingProvider). Мне удалось запустить код, но в Junit я не могу издеваться над ним. Совместное использование кода ниже

  String url="http://<soapservice>?.wsdl"
  SomeInterface port = someImplService.getSomeImplPort();
  BindingProvider bp = (BindingProvider) port;
  bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
  port.methodcall();


  I am trying to mock the service in Junit

  @Mock BindingProvider bp;
  @Mock SomeInterface someInterface;
  @Mock SomeImplService someImplService;
  @Mock Map<String, Object> context;

   First Try:
   when(this.someImplService.getSomeImplPort()).thenReturn(bp);
   when(bp.getRequestContext()).thenReturn(context);
   when(context.put(anyObject(), anyObject())).thenReturn(context);
   someInterface.methodcall();

   For above code first line compile error as it expect reference of SomeInterface

   Second Try:
   when(this.someImplService.getSomeImplPort()).thenReturn(someInterface);
   when((BindingProvider)someInterface).thenReturn(bp);
   when(bp.getRequestContext()).thenReturn(context);
   when(context.put(anyObject(), anyObject())).thenReturn(context);
   someInterface.methodcall();

   For above code ClassCast Exception at line 2


   Can someone suggest me solution how to mock the binding provider and impl classes in this case

1 Ответ

0 голосов
/ 05 мая 2020

Моя проблема была решена с помощью: someInterface = mock (SomeInterface.class, withSettings (). ExtraInterfaces (BindingProvider.class));

...