Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon In che modo il mockito gestisce le eccezioni controllate in modo diverso dalle eccezioni incontrollate


In che modo il mockito gestisce le eccezioni controllate in modo diverso dalle eccezioni incontrollate


Mockito Hands Eccezioni controllate e incontrollate in modo diverso, principalmente a causa di come Java tratta queste eccezioni e come Mockito è progettato per funzionare con le firme del metodo.

Eccezioni controllate

- Definizione: le eccezioni controllate sono eccezioni che vengono controllate al momento della compilazione. Devono essere catturati in un blocco `try-catch 'o dichiarato nella firma del metodo usando la parola chiave` lancia' [3].
- Monti di Mockito: Mockito consente di lanciare eccezioni controllate da un oggetto simulato solo se l'eccezione viene dichiarata nella firma del metodo. Se si tenta di lanciare un'eccezione controllata che non viene dichiarata, Mockito lancerà un `mockitoexception` con un messaggio che indica che l'eccezione controllata non è valida per quel metodo [1] [2]. Ad esempio, se un metodo `void somemethod () lancia ioexception`, puoi usare mockito per lanciare un` ioexception` senza problemi.

Eccezioni non controllate

- Definizione: le eccezioni non controllate sono eccezioni che non vengono controllate al momento della compilazione. In genere sono eccezioni o errori di runtime che indicano errori di programmazione [3].
- Montimetro Mockito: Mockito può facilmente gestire eccezioni incontrollate senza alcuna restrizione. Puoi usare `thenthrow ()` o `dothrow ()` per simulare eccezioni non controllate come `runtimeexception` o` nullpointerException` senza aver bisogno di essere dichiarate nella firma del metodo [1] [2]. Ciò rende semplice testare la gestione degli errori per condizioni impreviste.

soluzioni alternative per le eccezioni controllate

Se è necessario lanciare un'eccezione controllata che non è dichiarata nella firma del metodo, puoi usare il metodo `doanswer () di Mockito. Questo metodo consente di definire il comportamento personalizzato per un metodo simulato, incluso il lancio di eccezioni che non sono dichiarate nella firma del metodo [4]. Tuttavia, questo approccio richiede una maggiore gestione manuale ed è generalmente meno semplice rispetto all'utilizzo di `thenthrow ()` o `dothrow ()`.

In sintesi, la gestione da parte di Mockito delle eccezioni controllate è più restrittiva perché aderisce ai controlli a tempo di compilazione di Java, mentre le eccezioni non controllate possono essere lanciate liberamente, rendendole più facili da usare nei test.

Citazioni:
[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-diffference-between-thenthrowexception-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.browserstack.com/guide/mockito-hrow-exception