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(...));

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


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(...));

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.