Mockito prova un metodo vuoto genera un'eccezione


399

Ho un metodo con un voidtipo di ritorno. Può anche generare una serie di eccezioni, quindi mi piacerebbe testare quelle eccezioni che vengono generate. Tutti i tentativi sono falliti con lo stesso motivo:

Il metodo quando (T) nel tipo Stubber non è applicabile per gli argomenti (vuoto)

Qualche idea su come posso ottenere il metodo per generare un'eccezione specifica?

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

Risposte:


706

Le parentesi sono posizionate male. Devi usare

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

e non

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

Questo è spiegato nella documentazione


7
@edwardmlyte Questa incoerenza di Mockito è uno dei motivi per cui sono passato a MoxieMocks
Muel

È possibile utilizzare @clement entrambi: docs.mockito.googlecode.com/hg/latest/org/mockito/… . La creazione di un'eccezione non la genera.
JB Nizet,

1
@JB Nizet Sono totalmente d'accordo con te, ma se scrivo doThrow (new Exception ()) invece di doThrow (Exception.class), all'avvio del test ho il seguente errore; Eccezione prevista com.company.project.exception.ElementNotFoundException ma ho ottenuto org.mockito.exceptions.base.MockitoException:
clemente

2
Fai un'altra domanda, con il codice sotto test, il codice del test e la traccia stack completa dell'eccezione.
JB Nizet,

6
doThrow (new Exception ()). when (object) .voidMethod (any ());
Soumyajit Swain,

14

Se ti sei mai chiesto come farlo usando il nuovo stile BDD di Mockito:

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

E per riferimento futuro potrebbe essere necessario lanciare un'eccezione e quindi non fare nulla:

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

1
Grazie per aver pubblicato questo qui; se il metodo restituisce un valore: dato (mockedObject.methodReturningAnObject ()). willThrow (new Exception ()); se il metodo non restituisce nulla: willThrow (new Exception ()). given (mockedObject) .methodReturningVoid (...)); Modulo di spiegazione javadoc: "Il mozzamento dei vuoti richiede un approccio diverso da {@link Mockito # when (Object)} (o BDDMockito.given) perché al compilatore non piacciono i metodi del vuoto tra parentesi ..."
Wolf359,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.