Mockito se ocupă de excepții verificate și necontrolate în mod diferit, în primul rând datorită modului în care Java tratează aceste excepții și modul în care Mockito este proiectat pentru a funcționa cu semnăturile metodei.
Excepții verificate
- Definiție: Excepțiile verificate sunt excepții care sunt verificate la ora de compilare. Acestea trebuie fie prinse într-un bloc `try-capch`, fie declarate în semnătura metodei folosind cuvântul cheie„ aruncări ”[3].
- Manipulare Mockito: Mockito permite aruncarea excepțiilor verificate de la un obiect Mock numai dacă excepția este declarată în semnătura metodei. Dacă încercați să aruncați o excepție verificată care nu este declarată, Mockito va arunca un „MockitoException` cu un mesaj care indică faptul că excepția verificată este nevalidă pentru această metodă [1] [2]. De exemplu, dacă o metodă `void someMethod () aruncă IoException`, puteți utiliza Mockito pentru a arunca un„ ioException ”fără probleme.
Excepții necontrolate
- Definiție: Excepțiile necontrolate sunt excepții care nu sunt verificate la ora de compilare. De obicei, sunt excepții de rulare sau erori care indică erori de programare [3].
- Manevrarea Mockito: Mockito poate gestiona cu ușurință excepțiile necontrolate fără restricții. Puteți utiliza `thenthrow ()` sau `dothrow ()` pentru a simula excepții necontrolate precum `runtimexception` sau` nullpointerException`, fără a fi nevoie să fie declarate în semnătura metodei [1] [2]. Acest lucru face simplu să testați gestionarea erorilor pentru condiții neașteptate.
Soluții pentru excepții verificate
Dacă aveți nevoie să aruncați o excepție verificată care nu este declarată în semnătura metodei, puteți utiliza metoda „DOanswer” a lui Mockito. Această metodă vă permite să definiți comportamentul personalizat pentru o metodă batjocoritoare, inclusiv aruncarea excepțiilor care nu sunt declarate în semnătura metodei [4]. Cu toate acestea, această abordare necesită mai multă manipulare manuală și, în general, este mai puțin simplă decât utilizarea `thenthrow ()` sau `dothrow ()`.
În rezumat, manipularea de către Mockito a excepțiilor verificate este mai restrictivă, deoarece respectă verificările de compilare ale Java, în timp ce excepțiile necontrolate pot fi aruncate liber, ceea ce le face mai ușor de utilizat la teste.
Citări:[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-diffence-between-thenthwexception-class-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-mockito
[8] https://www.youtube.com/watch?v=6-gj2w2ycmi
[9] https://www.browerstack.com/guide/mockito-hthrow-exception