Подтвердить что ты не робот

Проблема Mockito - когда (java.lang.Void) в Stubber нельзя применить к void

Я не могу понять, почему doNothing не работает для этого? Любые идеи?

@Captor
ArgumentCaptor<GenericClass<someOtherClass>> captor;
...
Mockito.doNothing().when(mockObject.methodToStub(captor.capture()));

Ошибка:

Exception: when(java.lang.Void) in Stubber cannot be applied to void

4b9b3361

Ответ 1

Этот заглушка ошибочен:

doNothing().when(mockObject.methodToStub(captor.capture())); // wrong

methodToStub(...) должен быть вне when, если использовать этот стиль API (он должен содержать только макет):

doNothing().when(mockObject).methodToStub(captor.capture()); // correct

Тем не менее:

  • doNothing - значение по умолчанию для методов void для макета.
  • Вы можете использовать псевдонимы BDDMockito, которые позволяют вашему коду быть реальным.

Ответ 2

Хотя вы спрашиваете, почему doNothing не работает, я понимаю, что вы действительно хотите захватить аргумент метода methodToStub.

Самый простой способ сделать это:

verify(mockObject).methodToStub(captor.capture());

Если вы просто хотите, чтобы вы притворялись, что ничего не делаете при вызове метода void, помните, что ничего не делает, это default для методов void для mocks.

Если по какой-то причине вам все равно нужно позвонить doNothing, вам следует позаботиться о позиции скобок. Он должен выглядеть следующим образом:

doNothing().when(mockObject).methodToStub(any());

или   doNothing(), когда (mockObject).methodToStub(captor.capture());.