Mockito teste une méthode void lève une exception

399

J'ai une méthode avec un voidtype de retour. Il peut également lever un certain nombre d'exceptions, je voudrais donc tester ces exceptions levées. Toutes les tentatives ont échoué pour la même raison:

La méthode lorsque (T) dans le type Stubber n'est pas applicable pour les arguments (void)

Des idées sur la façon dont je peux obtenir la méthode pour lever une exception spécifiée?

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
edwardmlyte
la source

Réponses:

706

Les parenthèses sont mal placées. Tu dois utiliser

doThrow(new Exception()).when(mockedObject).methodReturningVoid(...);
                                          ^

et pas

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
                                                                   ^

Ceci est expliqué dans la documentation

JB Nizet
la source
7
@edwardmlyte Cette incohérence Mockito est l'une des raisons pour lesquelles je suis passé
Muel
@clement les deux peuvent être utilisés: docs.mockito.googlecode.com/hg/latest/org/mockito/… . La création d'une exception ne la jette pas.
JB Nizet
1
@JB Nizet Je suis totalement d'accord avec vous mais cependant si j'écris doThrow (new Exception ()) au lieu de doThrow (Exception.class), j'ai l'erreur suivante lorsque je lance mon test; Exception attendue com.company.project.exception.ElementNotFoundException mais a obtenu org.mockito.exceptions.base.MockitoException:
clement le
2
Posez une autre question, avec le code sous test, le code du test et la trace de pile complète de l'exception.
JB Nizet
6
doThrow (new Exception ()). when (object) .voidMethod (any ());
Soumyajit Swain
14

Si vous vous êtes déjà demandé comment le faire en utilisant le nouveau style BDD de Mockito:

willThrow(new Exception()).given(mockedObject).methodReturningVoid(...));

Et pour référence future, il peut être nécessaire de lever l'exception et de ne rien faire:

willThrow(new Exception()).willNothing().given(mockedObject).methodReturningVoid(...));
Ondrej Burkert
la source
1
Merci d'avoir posté cela ici; si la méthode renvoie une valeur: given (mockedObject.methodReturningAnObject ()). willThrow (new Exception ()); si la méthode ne renvoie rien: willThrow (new Exception ()). given (mockedObject) .methodReturningVoid (...)); Explication form javadoc: "Le stubbing voids nécessite une approche différente de {@link Mockito # when (Object)} (ou BDDMockito.given) car le compilateur n'aime pas les méthodes void entre crochets ..."
Wolf359