Mockito hanterar kontrollerade och okontrollerade undantag på olika sätt, främst på grund av hur Java behandlar dessa undantag och hur Mockito är utformad för att arbeta med metodsignaturer.
Kontrollerade undantag
- Definition: Kontrollerade undantag är undantag som kontrolleras vid kompileringstid. De måste antingen fångas i ett "Try-Catch" -block eller deklareras i metodsignaturen med hjälp av "kast" -ordet [3].
- Mockito -hantering: Mockito tillåter att kasta kontrollerade undantag från ett håligt objekt endast om undantaget deklareras i metodsignaturen. Om du försöker kasta ett kontrollerat undantag som inte förklaras, kommer Mockito att kasta en "Mockitoexception" med ett meddelande som indikerar att det kontrollerade undantaget är ogiltigt för den metoden [1] [2]. Till exempel, om en metod "void somMethod () kastar IoException", kan du använda Mockito för att kasta en "IOException" utan problem.
Unchecked undantag
- Definition: Unchecked undantag är undantag som inte kontrolleras vid sammanställningstid. Det är vanligtvis undantag från runtime eller fel som indikerar programmeringsfel [3].
- Mockito -hantering: Mockito kan enkelt hantera okontrollerade undantag utan några begränsningar. Du kan använda `Thenthrow ()` eller `dothrow ()` för att simulera okontrollerade undantag som `cuntimeException` eller` nullpointerexception` utan att behöva dem deklareras i metodsignaturen [1] [2]. Detta gör det enkelt att testa felhantering för oväntade förhållanden.
Lösningar för kontrollerade undantag
Om du behöver kasta ett kontrollerat undantag som inte deklareras i metodens signatur kan du använda Mockitos 'doanswer () -metod. Denna metod gör att du kan definiera anpassat beteende för en hålig metod, inklusive att kasta undantag som inte deklareras i metodsignaturen [4]. Detta tillvägagångssätt kräver emellertid mer manuell hantering och är i allmänhet mindre enkel än att använda `thenthrow ()` eller `dothrow ()`.
Sammanfattningsvis är Mockitos hantering av kontrollerade undantag mer restriktivt eftersom det följer Javas kompileringstidskontroller, medan okontrollerade undantag kan kastas fritt, vilket gör dem enklare att använda i tester.
Citeringar:[1] https://blog.samminng.in/blogs/checked-exception-is-invalid-for-this-method
[2] https://www.toptal.com/java/a-guide-to-veryday-mockito
]
[4] https://stackoverflow.com/questions/3762047/throw-checked-exceptions-from-mocks-with-mockito
]
[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-trow-exception