Mockito Lunchles skontrolované a nekontrolované výnimky odlišne, predovšetkým kvôli tomu, ako Java zaobchádza s týmito výnimkami a ako je Mockito navrhnutý tak, aby pracoval s podpismi metód.
skontrolované výnimky
- Definícia: Skontrolované výnimky sú výnimky, ktoré sa kontrolujú v čase kompilácie. Musia byť buď chytení v bloku `Try-Catch`, alebo sú deklarovaní v podpise metódy pomocou kľúčového slova` Throws` [3].
- Maniking Manicling: Mockito umožňuje hádzanie kontrolovaných výnimiek z falošného objektu iba vtedy, ak je výnimka deklarovaná v podpise metódy. Ak sa pokúsite vyhodiť kontrolovanú výnimku, ktorá nie je deklarovaná, Mockito hodí „MockitoException“ so správou, ktorá naznačuje, že kontrolná výnimka je pre túto metódu neplatná [1] [2]. Napríklad, ak metóda „neplatná somemethod () vyvolá ioException“, môžete použiť Mockito na vyhodenie `ioException` bez problémov.
Neoprávnené výnimky
- Definícia: Neoprávnené výnimky sú výnimky, ktoré sa nekontrolujú v čase kompilácie. Zvyčajne sú to výnimky alebo chyby, ktoré naznačujú chyby programovania [3].
- Manipulácia s Mockito: Mockito dokáže ľahko zvládnuť nekontrolované výnimky bez akýchkoľvek obmedzení. Môžete použiť `thenthRow ()` alebo `Dothrow ()` na simuláciu nezaškrtkaných výnimiek ako `runtimeException` alebo` nullPointerException` bez toho, aby ste ich potrebovali, aby boli v podpise metódy deklarované [1] [2]. Vďaka tomu je jednoduché otestovať manipuláciu s chybami za neočakávané podmienky.
Riešenie pre skontrolované výnimky
Ak potrebujete vyhodiť kontrolovanú výnimku, ktorá nie je deklarovaná v podpise metódy, môžete použiť metódu Mockito „Doanswer ()“. Táto metóda vám umožňuje definovať vlastné správanie pre falošnú metódu vrátane hádzania výnimiek, ktoré nie sú deklarované v podpise metódy [4]. Tento prístup si však vyžaduje viac manuálnej manipulácie a vo všeobecnosti je menej jednoduchý ako použitie `thentRow ()` alebo `dothrow ()`.
Stručne povedané, Mockitovo zaobchádzanie s kontrolovanými výnimkami je reštriktívnejšie, pretože dodržiava kontroly v čase kompilácie Java, zatiaľ čo nekontrolované výnimky môžu byť voľne hodené, čo uľahčuje ich použitie v testoch.
Citácie:[1] https://blog.sammkinng.in/blogs/checked-exception-is-invalid-for-this-method
[2] https://www.toptal.com/java/a-guide-to-veryday-mockito
[3] https://rollbar.com/blog/how-to-andle-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-between-thenthrewexception-class-plass-henthrewrew-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