Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hur hanterar mockito -hanterade undantag annorlunda än okontrollerade undantag


Hur hanterar mockito -hanterade undantag annorlunda än okontrollerade undantag


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