Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon W jaki sposób Mockito radzi sobie z sprawdzonymi wyjątkami inaczej niż niezaznaczone wyjątki


W jaki sposób Mockito radzi sobie z sprawdzonymi wyjątkami inaczej niż niezaznaczone wyjątki


Mocchito obsługuje sprawdzone i niezaznaczone wyjątki inaczej, przede wszystkim ze względu na sposób, w jaki Java traktuje te wyjątki i jak Mockito jest zaprojektowane do pracy z podpisami metod.

Sprawdzone wyjątki

- Definicja: Wyjątki sprawdzone są wyjątkami, które są sprawdzane w czasie kompilacji. Muszą być złapane w bloku „próba-catch”, albo zadeklarowane w podpisie metody za pomocą słowa kluczowego „rzucania” [3].
- Obsługa Mockleto: Mockito umożliwia wyrzucenie sprawdzonych wyjątków z próbnego obiektu tylko wtedy, gdy wyjątek jest zadeklarowany w podpisie metody. Jeśli spróbujesz rzucić sprawdzony wyjątek, który nie jest zadeklarowany, Mockleto rzuci „mocchitoException” z komunikatem wskazującym, że sprawdzony wyjątek jest nieprawidłowy dla tej metody [1] [2]. Na przykład, jeśli metoda „void somemethod () rzuca ioException`, możesz użyć Mockleto do rzucenia„ ioException ”bez problemów.

Niezazorowane wyjątki

- Definicja: Niezbędne wyjątki są wyjątkami, które nie są sprawdzane w czasie kompilacji. Zazwyczaj są to wyjątki lub błędy w czasie wykonywania, które wskazują błędy programowania [3].
- Obsługa Mockleto: Mockito może łatwo poradzić sobie z niezaznaczonymi wyjątkami bez żadnych ograniczeń. Możesz użyć `thenthrow ()` lub `dothrow () ', aby symulować niezaznaczone wyjątki, takie jak` `RuntimeException' lub` nullPointerException` bez konieczności zadeklarowania ich w podpisie metody [1] [2]. To sprawia, że ​​testowanie błędów w nieoczekiwanych warunkach jest proste.

Obejścia dla sprawdzonych wyjątków

Jeśli chcesz rzucić sprawdzony wyjątek, który nie jest zadeklarowany w podpisie metody, możesz użyć metody Mocchito „Doanswer ()”. Ta metoda pozwala zdefiniować niestandardowe zachowanie dla próbnej metody, w tym rzucanie wyjątków, które nie są zadeklarowane w podpisie metody [4]. Jednak to podejście wymaga bardziej ręcznego obsługi i jest ogólnie mniej proste niż użycie „thenthrow ()` lub `dothrow ()`.

Podsumowując, obsługa Mockito sprawdzonych wyjątków jest bardziej restrykcyjna, ponieważ przylega do kontroli czasu kompilacji Java, podczas gdy niezaznaczone wyjątki mogą być rzucane swobodnie, co ułatwia je w testach.

Cytaty:
[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-to uchodle-checked-unchecked-exceptions-in-java/
[4] https://stackoverflow.com/questions/3762047/throw-checked-exceptions-from-mocks-with-mockoto
[5] https://stackoverflow.com/questions/38852392/mockoito-difference-between-thenthRowException-s-and-thenthrownew-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-gocchito
[8] https://www.youtube.com/watch?v=6-GJ2W2YCMI
[9] https://www.browserstack.com/guide/mockito-throw-exception