Mockito gère les exceptions vérifiées et incontrôlées différemment, principalement en raison de la façon dont Java traite ces exceptions et de la façon dont Mockito est conçu pour fonctionner avec les signatures de méthode.
Exceptions vérifiées
- Définition: les exceptions vérifiées sont des exceptions qui sont vérifiées au moment de la compilation. Ils doivent être pris dans un bloc `` TRY-CATCH 'ou déclarés dans la signature de la méthode à l'aide du mot clé «Throws» [3].
- Mockito Manipulation: Mockito permet de lancer des exceptions vérifiées à partir d'un objet simulé uniquement si l'exception est déclarée dans la signature de la méthode. Si vous essayez de lancer une exception vérifiée qui n'est pas déclarée, Mockito lancera un `MockitoException» avec un message indiquant que l'exception vérifiée est invalide pour cette méthode [1] [2]. Par exemple, si une méthode «void SomeMethod () lève ioException», vous pouvez utiliser Mockito pour lancer une `ioException» sans problème.
Exceptions non contrôlées
- Définition: les exceptions non contrôlées sont des exceptions qui ne sont pas vérifiées au moment de la compilation. Ce sont généralement des exceptions ou des erreurs d'exécution qui indiquent des erreurs de programmation [3].
- Mockito Manipulation: Mockito peut facilement gérer les exceptions non contrôlées sans aucune restriction. Vous pouvez utiliser `thenthrow ()` ou `dothrow ()` pour simuler des exceptions incontrôlées comme `RuntimeException» ou `nullpointerException» sans en avoir besoin d'être déclarés dans la signature de la méthode [1] [2]. Cela rend simple de tester la gestion des erreurs pour les conditions inattendues.
Savettes de contournement pour des exceptions vérifiées
Si vous devez lancer une exception vérifiée qui n'est pas déclarée dans la signature de la méthode, vous pouvez utiliser la méthode `Doanswer () de Mockito. Cette méthode vous permet de définir un comportement personnalisé pour une méthode simulée, y compris le lancement d'exceptions qui ne sont pas déclarées dans la signature de la méthode [4]. Cependant, cette approche nécessite plus de manipulation manuelle et est généralement moins simple que d'utiliser `thenthrow () 'ou` dothrow ()'.
En résumé, la gestion des exceptions vérifiées par Mockito est plus restrictive car elle adhère aux contrôles de temps de compilation de Java, tandis que les exceptions non contrôlées peuvent être jetées librement, ce qui les rend plus faciles à utiliser dans les tests.
Citations:[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-handle-checked-undecked-exceptions-in-java/
[4] https://stackoverflow.com/questions/3762047/throw-checked-exceptions-from-mocks-with-mockito
[5] https://stackoverflow.com/questions/38852392/mockito-difference-between-thenthrowexception-class-and-thenthrownew-excepti
[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-exceptions-from-mocks-with-mockito
[8] https://www.youtube.com/watch?v=6-gj2w2ycmi
[9] https://www.browserstack.com/guide/mockito-throw-exception