Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kako Mockito Hands je preverjal izjeme drugače kot nenadzorovane izjeme


Kako Mockito Hands je preverjal izjeme drugače kot nenadzorovane izjeme


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