Mockito obdeluje preverjene in nenadzorovane izjeme drugače, predvsem zaradi tega, kako Java obravnava te izjeme in kako je Mockito zasnovan tako, da deluje s podpisi metod.
Preverjene izjeme
- Opredelitev: Preverjene izjeme so izjeme, ki jih preverjamo v času prevajanja. Ujeti jih je treba bodisi v bloku `poskusno pribor" ali jih razglasiti v podpisu metode s ključno besedo "Throws" [3].
- Mockito Ravnanje: Mockito omogoča metanje preverjenih izjem iz posmehljivega predmeta samo, če je izjema razglašena v podpisu metode. Če poskušate vrgel preverjeno izjemo, ki ni razglašena, bo Mockito s sporočilom vrgel "mockitoException" s sporočilom, ki kaže, da je preverjena izjema neveljavna za to metodo [1] [2]. Na primer, če metoda `void Somemethod () vrže ioexception`, lahko uporabite mockito, da brez težav vržete` ioexception ”.
Neposredne izjeme
- Opredelitev: Nepotrjene izjeme so izjeme, ki jih v času prevajanja ne preverjajo. Običajno so izjeme ali napake, ki kažejo na programske napake [3].
- Mockito Ravnanje: Mockito brez kakršnih koli omejitev zlahka obravnava nepreverjene izjeme. Lahko uporabite `thenthrow ()` ali `dothrow ()` za simulacijo nenadzorovanih izjem, kot sta `RuntimeException` ali` nullpointeRexception`, ne da bi jih bilo treba razglasiti v podpisu metode [1] [2]. Zaradi tega je enostavno preizkusiti ravnanje z napakami za nepričakovane pogoje.
Reševanje za preverjene izjeme
Če morate vrniti preverjeno izjemo, ki ni razglašena v podpisu metode, lahko uporabite Mockitovo metodo `DoAnswer ()`. Ta metoda vam omogoča, da določite vedenje po meri za zasmehovano metodo, vključno z metanjem izjem, ki niso razglašene v podpisu metode [4]. Vendar pa ta pristop zahteva več ročnega ravnanja in je na splošno manj preprost kot uporaba `thenthrow ()` ali `dothrow ()`.
Če povzamemo, je Mockitovo ravnanje z preverjenimi izjemami bolj restriktivno, ker se drži Jave-ovih preverjanj sestavljanja, medtem ko je mogoče nepreverjene izjeme prosto metati, kar jim olajša uporabo v testih.
Navedbe:[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/3852392/mockito-difference-between-tHrowexception-class-and-thrownew-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.browestack.com/guide/mockito-throw-xception