Mockito hanteert de uitzonderingen van gecontroleerde en ongecontroleerde uitzonderingen anders, voornamelijk vanwege hoe Java deze uitzonderingen behandelt en hoe Mockito is ontworpen om te werken met methodehandtekeningen.
Gecheckte uitzonderingen
- Definitie: gecontroleerde uitzonderingen zijn uitzonderingen die op compileertijd worden gecontroleerd. Ze moeten ofwel worden gevangen in een `try-catch`-blok of worden aangegeven in de methode-handtekening met behulp van het trefwoord 'THROS' [3].
- Mockito Handling: Mockito maakt het mogelijk om gecontroleerde uitzonderingen uit een mock -object te gooien als de uitzondering wordt verklaard in de handtekening van de methode. Als u probeert een gecontroleerde uitzondering te geven die niet wordt verklaard, gooit Mockito een `mockitoexception 'met een bericht dat aangeeft dat de aangevinkt uitzondering ongeldig is voor die methode [1] [2]. Als een methode bijvoorbeeld `void somemethod () ioxceptie 'gooit, kunt u mockito gebruiken om zonder problemen een` ioxceptie' te gooien.
Uitgeschakelde uitzonderingen
- Definitie: ongecontroleerde uitzonderingen zijn uitzonderingen die niet op compileertijd worden gecontroleerd. Het zijn meestal runtime -uitzonderingen of fouten die aangeven programmeerfouten [3].
- Mockito Handling: Mockito kan gemakkelijk ongecontroleerde uitzonderingen afhandelen zonder enige beperkingen. U kunt `thenhrow ()` of `dothrow ()` gebruiken om ongecontroleerde uitzonderingen te simuleren, zoals `runtimeException 'of` nullpointerException' zonder dat ze nodig zijn om te worden verklaard in de handtekening van de methode [1] [2]. Dit maakt het eenvoudig om foutafhandeling te testen op onverwachte omstandigheden.
Wordtrapporten voor aangevinkt uitzonderingen
Als u een gecontroleerde uitzondering moet gooien die niet wordt verklaard in de handtekening van de methode, kunt u Mockito's `doanswer ()` methode gebruiken. Met deze methode kunt u aangepast gedrag definiëren voor een mock -methode, inclusief het gooien van uitzonderingen die niet worden verklaard in de handtekening van de methode [4]. Deze aanpak vereist echter meer handmatige hantering en is over het algemeen minder eenvoudig dan het gebruik van `thenhrow ()` of `dothrow ()`.
Samenvattend is Mockito's afhandeling van checked uitzonderingen beperkend omdat het zich houdt aan Java's compileertijdcontroles, terwijl ongecontroleerde uitzonderingen vrij kunnen worden gegooid, waardoor ze gemakkelijker te gebruiken in tests kunnen worden gebruikt.
Citaten:[1] https://blog.sammkinng.in/blogs/checked-exception-is-invalid-for-this-method
[2] https://www.toptal.com/java/a-guide-to-reyday-mockito
[3] https://rollbar.com/blog/how-to-handle-checked-unchecked-exceptions-in-java/
[4] https://stackoverflow.com/questions/3762047/throw-checked-exceptions-from-mocks-with-mockito
[5] https://stackoverflow.com/questions/38852392/mockito-difference-tween-thenthrowException-class-enthenthrownew-Excepti
[6] https://www.reddit.com/r/java/comment
[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.browstack.com/guide/mockito-throw-exception