невозможно смоделировать метод возврата клиента Singleиспользуя Mockito - PullRequest
0 голосов
/ 11 февраля 2019

Я строю микросервис с помощью Micronaut.Этот конкретный сервис зависит от автоматически сгенерированного клиента из другого сервиса, который я хотел бы смоделировать в своих тестах компонентов.

Однако я не могу смоделировать один из методов apiClient.это выглядит так:

    Single<? extends HttpResponse> patchProfile(String userId, UserprofileApiEntity userProfile);

, где HttpResponse из пакета io.micronaut.http, а Single из пакета io.reactivex

В моем тесте япытаясь смоделировать эту конечную точку следующим образом:

        when(userProfileClientMock.patchProfile(userIdCaptor.capture(), profileCaptor.capture())).thenReturn(Single.just(HttpResponse.ok()));

однако я получаю ошибку

error: no suitable method found for thenReturn(Single<CAP#1>)
        when(userProfileClientMock.patchProfile(userIdCaptor.capture(), profileCaptor.capture())).thenReturn(response);
                                                                                                 ^
    method OngoingStubbing.thenReturn(Single<CAP#2>) is not applicable
      (argument mismatch; Single<CAP#1> cannot be converted to Single<CAP#2>)
    method OngoingStubbing.thenReturn(Single<CAP#2>,Single<CAP#2>...) is not applicable
      (argument mismatch; Single<CAP#1> cannot be converted to Single<CAP#2>)
  where CAP#1,CAP#2 are fresh type-variables:
    CAP#1 extends HttpResponse from capture of ? extends HttpResponse
    CAP#2 extends HttpResponse from capture of ? extends HttpResponse
Note: /home/anders/Documents/minecraft/minecraft.api.public.displaynames/minecraft.api.public.displaynames.server/src/test/java/net/minecraft/api/pub/displaynames/DisplaynamesApiTest.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error

из того, что я понял, что-то связано с частью <? extends . . .>подпись, я успешно смоделировал различные методы от похожих апиклиентов, возвращая такие вещи, как Single<Foo> или Maybe<Bar>, к сожалению, в этом случае нет смысла изменять подпись клиента.

Я пытался указатьответ единственная в качестве переменной, в явном виде набирая ее как Single<? extends HttpResponse> и Single<MutableHttpResponse>, думая, что, возможно, mockito каким-то образом путают стирание типа, но безрезультатно.

любые идеи, которые могут быть причиной этогои как обойти это?

1 Ответ

0 голосов
/ 12 февраля 2019

, так что я в конечном итоге смог решить эту проблему, используя другую грамматику mockito, а именно

doReturn(foo).when(bazMock).barMethod();

, этот стиль насмешки не обеспечивает безопасность типов, что является своего рода компромиссом, ноздесь, кажется, неизбежное зло.Я полагаю, что это применимо к любому случаю, когда вы хотите смоделировать что-то, возвращающее универсальный класс, напечатанный как foo<? extends bar>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...