web-dev-qa-db-fra.com

Problème Mockito - lorsque (Java.lang.Void) dans Stubber ne peut pas être appliqué à void

Je n'arrive pas à comprendre pourquoi le doNothing ne fonctionne pas pour cela? Des idées?

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

L'erreur est:

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

32
mstrom

Ce talon est faux:

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

methodToStub(...) doit être en dehors de when si vous utilisez ce style API (il ne doit contenir que la maquette):

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

Tho remarque cependant:

  1. doNothing est la valeur par défaut pour les méthodes void pour une maquette.
  2. Vous pouvez utiliser les alias BDDMockito qui permettent à votre code d'être réel à la Développement basé sur le comportement
60
Brice

Bien que vous demandiez pourquoi doNothing ne fonctionne pas, je comprends que vous voulez réellement capturer l'argument de methodToStub.

La façon la plus simple de le faire serait:

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

Si vous voulez juste que vous vous moquiez de ne rien faire du tout sur un appel de méthode void, souvenez-vous que ne rien faire est le par défaut pour les méthodes void sur les mocks.

Si, pour une raison quelconque, vous devez toujours appeler doNothing, vous devez faire attention à la position des parenthèses. Ça devrait ressembler à ça:

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

ou doNothing (). when (mockObject) .methodToStub (captor.capture ());

7
Paulo Schreiner