Ich benutze Mockito. Ich möchte RuntimeException
werfen, wenn unmounted Methode aufgerufen wird. Gibt es eine Möglichkeit, dies zu tun?werfen RuntimeException beim Aufrufen von unmounted Methode
Antwort
Sie können eine Standardantwort für einen Schein festlegen. Alle Methoden, die nicht abgestempelt werden, verwenden diese Standardantwort.
public void testUnstubbedException() {
// Create a mock with all methods throwing a RuntimeException by default
SomeClass someClass = mock(SomeClass .class, new RuntimeExceptionAnswer());
doReturn(1).when(someClass).getId(); // Must use doReturn
int id = someClass.getId(); // Will return 1
someClass.unstubbedMethod(); // Will throw RuntimeException
}
public static class RuntimeExceptionAnswer implements Answer<Object> {
public Object answer(InvocationOnMock invocation) throws Throwable {
throw new RuntimeException (invocation.getMethod().getName() + " is not stubbed");
}
}
Beachten Sie, dass nicht Verwendung when
mit dieser Funktionalität, da das Verfahren vor when
(How does mockito when() invocation work?) genannt wird, und es wird eine RuntimeException
werfen, bevor der mock in Modus stubbing geht.
Daher müssen Sie doReturn
verwenden, damit dies funktioniert.
Vielen Dank! Aber wenn ich 'when (someClass.unmpokedMethod()). ThanReturn ("huerga")' eingefügt habe, wird weiterhin die Ausnahme – Hlib
ausgelöst. Sie müssen 'doReturn' anstelle von' when' verwenden. Ich habe meine Antwort mit dieser Lösung bearbeitet. –
Danke! Das funktioniert wirklich! – Hlib
Sie verhöhnen eine ganze Klasse und das Ergebnis ist, dass alle Methoden Null zurückgeben werden.
Dann können Sie doReturn(...)
verwenden, um dieses Verhalten zu ändern. Ähnlich können Sie doThrow(...)
verwenden, um (wie ich mich erinnere, nur void
) Methoden Ausnahmen auszulösen.
Beantwortet das Ihre Frage?
Ich denke, er möchte sicherstellen, dass alle Methoden verspottet werden, zum Beispiel, dass Mockito eine Ausnahme auslöst, wenn eine Methode nicht verspottet wurde. –
Ja! Aber ich möchte sicherstellen, dass alle Methoden, die aufgerufen werden, verspottet werden. – Hlib
Alle Methoden in einer mocked Klasse _are_ verspottet - per Definition. –
Der beste Weg, dies zu tun, ist mit den statischen Methoden verifyNoMoreInteractions
und ignoreStubs
. Rufen Sie diese nach dem "Akt" -Teil Ihres Tests an. und Sie erhalten einen Fehler, wenn Methoden ohne Stubben aufgerufen, aber nicht verifiziert wurden.
verifyNoMoreInteractions(ignoreStubs(myMock));
Dies ist bei https://static.javadoc.io/org.mockito/mockito-core/2.8.47/org/mockito/Mockito.html#ignore_stubs_verification beschrieben, obwohl ich, dass das Codebeispiel glaube, dass es derzeit einen Druckfehler enthält.
+1 Ich bevorzuge diese Lösung zu meinen. –
Dies hilft nicht, wenn Ihr Test vor diesem Punkt aufgrund einer Null-Dereferenzierung, die durch einen Aufruf einer nicht angehängten Methode verursacht wurde, dunkel abgestürzt ist. –
Ausgezeichnet. Ich frage mich, warum das in den Dokumenten so versteckt ist. –
- 1. setVideoSource werfen Runtimeexception (war: Illegal)
- 2. Methode werfen Ausnahme nicht kompilieren, aber kein Problem mit RuntimeException
- 3. RuntimeException in Gson beim Parsen von JSON: Fehler beim Aufrufen von protected java.lang.ClassLoader() ohne Argumente
- 4. System.exit (num) oder eine RuntimeException von main werfen?
- 5. Javascript -> Flash werfen "Fehler beim Aufrufen von Methode auf NPObject"
- 6. RuntimeException beim Klicken auf EditText
- 7. DbContext.SaveChanges Methode Null Reference Exception beim Speichern von Daten werfen
- 8. RuntimeException & Error
- 9. Exception werfen, dann Constructor aufrufen?
- 10. Beim Aufrufen der abstrakten Methode aus der konkreten Klasse werfen NullPointerException
- 11. Methode von vorheriger Klasse aufrufen
- 12. ANDROID- warum claimInterface unmounted USB?
- 13. RuntimeException-Propagierung von einer Methode, die durch Reflexion
- 14. Problem beim Aufrufen einer Methode für eine Elternklasse
- 15. Fallstricke beim Aufrufen der statischen Methode von ASMX
- 16. Abrufen von java.lang.NullPointerException beim Aufrufen der activate-Methode auf TaskClient
- 17. Hadoop OutputFormat RunTimeException beim Ausführen von Apache Spark Kafka Stream
- 18. Actionscript2.0-Methode von Javascript aufrufen
- 19. Java-Methode von PHP5 aufrufen
- 20. Mehrere Ausnahmen von einer Methode werfen
- 21. Zeus werfen Fehler beim Ausführen von RSpec
- 22. assert (false) vs RuntimeException?
- 23. beim Analysieren von Json Daten werfen Fehler
- 24. Get Methode werfen Request.Path Ausnahme
- 25. Ausnahme beim Aufrufen von Replace_one in Python
- 26. Muss ich die offAuth-Methode beim Abmelden aufrufen?
- 27. Fehler beim Aufrufen der Methode auf NPObject! in Android 2.2
- 28. SqlRoleProvider: NullReferenceException beim Aufrufen von Roles.GetRolesForUser
- 29. Cross Domain ExternalInterface "Fehler beim Aufrufen der Methode auf NPObject"
- 30. asynchrone synchrone Methode aufrufen
warum möchten Sie das tun? – Woot4Moo
Genau was meinst du mit "unmoocked Methode" in diesem Zusammenhang? Alle Methoden in einer Klasse werden verspottet, wenn 'mock (...)'/'@ Mock' verwendet wird. –
Weil ich oft vergessen, einige Methoden zu verspotten. Ausnahmen können helfen, diese Methoden zu finden. – Hlib