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