A Mockito eltérő módon ellenőrizte és ellenőrizetlen kivételeket kezeli, elsősorban annak köszönhetően, hogy a Java hogyan kezeli ezeket a kivételeket, és hogy a Mockito hogyan tervezték a módszer aláírásainak működésére.
Ellenőrizte a kivételeket
- Meghatározás: Az ellenőrzött kivételek olyan kivételek, amelyeket a fordított időpontban ellenőriznek. Ezeket vagy egy „Try-Catch” blokkba kell kerülni, vagy a „dobások” kulcsszó segítségével [3] felhasználásával deklarálják a módszer aláírásában.
- Mockito kezelés: A Mockito csak akkor engedi, hogy az ellenőrzött kivételek dobjanak egy álobjektumból, ha a kivételt a módszer aláírásában deklarálják. Ha megkísérel egy ellenőrzött kivételt dobni, amelyet nem deklaráltak, a Mockito egy „MockitoException” -t dob egy olyan üzenettel, amely jelzi, hogy az ellenőrzött kivétel érvénytelen erre a módszerre [1] [2]. Például, ha egy „void someMethod () eldobja az ioException” módszert, akkor a Mockito segítségével egy „ioException” -t dobhat problémák nélkül.
Nem ellenőrzött kivételek
- Meghatározás: A nem ellenőrzött kivételek olyan kivételek, amelyeket a fordításkor nem ellenőriznek. Ezek általában futásidejű kivételek vagy hibák, amelyek jelzik a programozási hibákat [3].
- Mockito kezelés: A Mockito korlátozások nélkül könnyen kezelheti a nem ellenőrzött kivételeket. Használhatja a „thenthrow ()” vagy a „dothrow ()” jelölést olyan nem ellenőrzött kivételek szimulálására, mint például a „runtimeException” vagy a „nullpointerexception”, anélkül, hogy a módszer aláírásában deklarálnák őket [1] [2]. Ez egyértelművé teszi a hibakezelés tesztelését a váratlan körülmények között.
Az ellenőrzött kivételek megoldása
Ha olyan ellenőrzött kivételt kell dobnia, amelyet a módszer aláírásában nem deklarálnak, akkor használhatja a Mockito `doanswer ()` módszerét. Ez a módszer lehetővé teszi az egyéni viselkedés meghatározását egy modell módszerhez, ideértve a módszer aláírásában nem deklarált kivételeket [4]. Ez a megközelítés azonban több kézi kezelést igényel, és általában kevésbé egyértelmű, mint a `thenthrow ()` vagy a `dothrow ()` használata.
Összefoglalva: a Mockito ellenőrzött kivételek kezelése szigorúbb, mivel betartja a Java fordítási idő ellenőrzéseit, míg az ellenőrzött kivételek szabadon dobhatók, megkönnyítve őket a tesztekben.
Idézetek:[1] https://blog.sammkinng.in/blogs/checked-exception-is-invalid-for-this-thod
[2] https://www.toptal.com/java/a-guide-to-everyday-mockito
[3] https://rollbar.com/blog/how-to-kezle-checked-shicecked-exceptions-in-java/
[4] https://stackoverflow.com/questions/3762047/throw-checked-exceptions-mocks-with-mockito
[5] https://stackoverflow.com/questions/38852392/mockito-difference-between-thenthrowException-class-and-henthrownew-excepi
[6] https://www.reddit.com/r/java/comments/1ccct4iq/if_everyone_hates_checked_exceptions_wherees_the/
[7] https://www.janbasktraining.com/community/java/throw-checked-exceptions-mocks-with-mockito
[8] https://www.youtube.com/watch?v=6-gj2w2ycmi
[9] https://www.browserstack.com/guide/mockito-thow-exception