Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Jak se mockito zpracovává, odlišně odlišně od nekontrolovaných výjimek


Jak se mockito zpracovává, odlišně odlišně od nekontrolovaných výjimek


Mockito zpracovává zkontrolované a nekontrolované výjimky odlišně, především kvůli tomu, jak Java zachází s těmito výjimkami a jak je Mockito navržen tak, aby pracoval s podpisy metod.

Kontrolované výjimky

- Definice: Kontrolované výjimky jsou výjimky, které jsou kontrolovány v době kompilace. Musí být buď zachyceny v bloku „try-catch“, nebo deklarovány v podpisu metody pomocí klíčového slova „házení“ [3].
- Manipulace s Mockito: Mockito umožňuje házet kontrolované výjimky z falešného objektu, pouze pokud je výjimka deklarována v podpisu metody. Pokud se pokusíte vyhodit kontrolovanou výjimku, která není deklarována, Mockito hodí „mockitoexception“ se zprávou, která označuje, že kontrolovaná výjimka je pro tuto metodu neplatná [1] [2]. Například, pokud metoda `void somemethod () vyvolá iOexception`, můžete použít Mockito k házení` iOexception` bez problémů.

Nekontrolované výjimky

- Definice: Nekontrolované výjimky jsou výjimky, které nejsou kontrolovány v době kompilace. Obvykle se jedná o výjimky z běhu nebo chyb, které naznačují chyby programování [3].
- Manipulace s Mockito: Mockito může snadno zvládnout nekontrolované výjimky bez jakýchkoli omezení. Pro simulaci nekontrolovaných výjimek, jako je `runtimeexception` nebo `nullPoInterexception, můžete použít` thenTrow () `nebo` dothrow () `. Díky tomu je jednoduché testovat zpracování chyb za neočekávané podmínky.

Řešení pro kontrolované výjimky

Pokud potřebujete vyhodit kontrolovanou výjimku, která není deklarována v podpisu metody, můžete použít metodu „Doanswer ()` Mockito () “. Tato metoda umožňuje definovat vlastní chování pro falešnou metodu, včetně házení výjimek, které nejsou deklarovány v podpisu metody [4]. Tento přístup však vyžaduje více manuální manipulace a je obecně méně jednoduché než použití `thenthrow ()` nebo `dothrow ()`.

Stručně řečeno, Mockito je zpracování kontrolovaných výjimek restriktivnější, protože dodržuje kontroly času kompilace Java, zatímco nekontrolované výjimky mohou být volně hozeny, což usnadňuje použití při testech.

Citace:
[1] https://blog.sammkinng.in/blogs/checked-exception-is-invalid-for-This-Method
[2] https://www.toptal.com/java/a-guide-to-everyday-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-between-thentTHroWexception-Class-and-thentTHROWNEW-ONCEPTI
[6] https://www.reddit.com/r/java/comments/1cct4iq/if_everyone_hates_checked_exceptionals_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.browerstack.com/guide/mockito-throw-exception