Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ako sa Mockito riadi kontrolované výnimky odlišne od nekontrolovaných výnimiek


Ako sa Mockito riadi kontrolované výnimky odlišne od nekontrolovaných výnimiek


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