Mockito -Griffe überprüfte und deaktivierte Ausnahmen unterschiedlich, vor allem aufgrund der Behandlung von Java mit diesen Ausnahmen und der Art und Weise, wie Mockito für die Arbeit mit Methodensignaturen ausgelegt ist.
Überprüfte Ausnahmen
- Definition: Überprüfte Ausnahmen sind Ausnahmen, die zur Kompilierungszeit überprüft werden. Sie müssen entweder in einem "Try-Catch" -Block gefangen sein oder in der Methodensignatur unter Verwendung des Schlüsselworts "Throws" in der Methodensignatur deklariert werden [3].
- Mockito -Handhabung: Mockito ermöglicht das Werfen von überprüften Ausnahmen von einem Mock -Objekt nur, wenn die Ausnahme in der Methodensignatur deklariert ist. Wenn Sie versuchen, eine geprüfte Ausnahme zu werfen, die nicht deklariert wird, werfen Mockito eine "MockitoException" mit einer Nachricht, die angibt, dass die geprüfte Ausnahme für diese Methode ungültig ist [1] [2]. Wenn beispielsweise eine Methode `void somemethod () IOException` 'auslöst, können Sie Mockito verwenden, um ein" ioException "ohne Probleme zu werfen.
Unkontrollierte Ausnahmen
- Definition: Unkontrollierte Ausnahmen sind Ausnahmen, die zur Kompilierungszeit nicht überprüft werden. Es handelt sich in der Regel um Laufzeitausnahmen oder Fehler, die auf Programmierfehler hinweisen [3].
- Mockito -Handhabung: Mockito kann ohne Beschränkungen leicht nicht überprüfte Ausnahmen behandeln. Sie können `thenthrow ()` oder `dothrow () verwenden, um nicht kontrollierte Ausnahmen wie" RunTimeException "oder" nullPointerexception "zu simulieren, ohne dass sie in der Methodensignatur deklariert werden müssen [1] [2]. Dies macht es unkompliziert, die Fehlerbehandlung für unerwartete Bedingungen zu testen.
Problemumgehungen für überprüfte Ausnahmen
Wenn Sie eine geprüfte Ausnahme auswerfen müssen, die in der Methode -Signatur nicht deklariert ist, können Sie Mockitos "toanswer ()" -Methode verwenden. Mit dieser Methode können Sie benutzerdefiniertes Verhalten für eine Scheinmethode definieren, einschließlich Ausnahmen, die in der Methodensignatur nicht deklariert sind [4]. Dieser Ansatz erfordert jedoch ein manueller Handhabung und ist im Allgemeinen weniger einfach als "Thenthrow ()" oder "Dothrow ()`.
Zusammenfassend ist Mockitos Umgang mit überprüften Ausnahmen restriktiver, da es sich an Javas Kompilierungszeitprüfungen hält, während nicht überprüfte Ausnahmen frei geworfen werden können, was die Verwendung in Tests leichter zu verwenden.
Zitate:[1] https://blog.sammkinng.in/blogs/checked-exception-is-invalid-for-this-method
[2] https://www.toptal.com/java/a-guide-to-everyday-mockito
[3] https://rollbar.com/blog/how-to-pehandle-checked-osched-eceptions-in-java/
[4] https://stackoverflow.com/questions/3762047/throw-checked-eceptions-from-mocks-with-mockito
[5] https://stackoverflow.com/questions/38852392/mockito-differenz-between-thenthrowexception-class-thenthrownew-xcepti
[6] https://www.reddit.com/r/java/comments/1cct4iq/if_everyone_hates_checked_exceptions_wheres_the/
[7] https://www.janbasktraining.com/community/java/throw-checked-eceptions-from-mocks-with-mockito
[8] https://www.youtube.com/watch?v=6-GJ2W2YCMI
[9] https://www.browsstack.com/guide/mockito-trow-exception