Mockito testet eine void-Methode und löst eine Ausnahme aus
Lesezeit: 3 Minuten
edwardmlyte
Ich habe eine Methode mit a void Rückgabetyp. Es kann auch eine Reihe von Ausnahmen auslösen, daher möchte ich testen, ob diese Ausnahmen ausgelöst werden. Alle Versuche sind aus demselben Grund gescheitert:
Die Methode when(T) im Typ Stubber gilt nicht für die Argumente (void)
Irgendwelche Ideen, wie ich die Methode dazu bringen kann, eine bestimmte Ausnahme auszulösen?
@JB Nizet Ich stimme dir voll und ganz zu, aber wenn ich doThrow(new Exception()) anstelle von doThrow(Exception.class) schreibe, habe ich den folgenden Fehler, wenn ich meinen Test starte; Ausnahme com.company.project.exception.ElementNotFoundException erwartet, aber org.mockito.exceptions.base.MockitoException erhalten:
– milde
24. Juli 2015 um 8:21 Uhr
Stellen Sie eine weitere Frage mit dem zu testenden Code, dem Testcode und dem vollständigen Stack-Trace der Ausnahme.
Danke, dass du das hier gepostet hast; wenn die Methode einen Wert zurückgibt: Given(mockedObject.methodReturningAnObject()).willThrow(new Exception()); wenn die Methode nichts zurückgibt: willThrow(new Exception()).given(mockedObject).methodReturningVoid(…)); Erklärungsformular javadoc: “Stubbing voids erfordert einen anderen Ansatz als {@link Mockito#when(Object)} (oder BDDMockito.given), da der Compiler keine void-Methoden in Klammern mag …”
– Wolf359
17. Dezember 2018 um 7:55 Uhr
Ayushi
Sie können etwas wie das Folgende versuchen:
given(class.method()).willAnswer(invocation -> {
throw new ExceptionClassName();
});
In meinem Fall wollte ich eine explizite Ausnahme für einen Try-Block auslösen, mein Methodenblock war so etwas wie unten
public boolean methodName(param) throws SomeException{
try(FileOutputStream out = new FileOutputStream(param.getOutputFile())) {
//some implementation
} catch (IOException ioException) {
throw new SomeException(ioException.getMessage());
} catch (SomeException someException) {
throw new SomeException (someException.getMessage());
} catch (SomeOtherException someOtherException) {
throw new SomeException (someOtherException.getMessage());
}
return true;
}
Ich habe alle oben genannten Ausnahmen für die Sonarabdeckung wie unten beschrieben
given(class.method()) gibt den gleichen Fehler. Dein methodName gibt einen booleschen Wert zurück, während OP explizit verlangte, dass es void zurückgibt
– Christian Vincenzo Traina
3. Juni um 12:42 Uhr
13611700cookie-checkMockito testet eine void-Methode und löst eine Ausnahme ausyes
Mögliches Duplikat von How to make mock to void methods with mockito
– Willian
24. Juli 2017 um 20:40 Uhr