Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ¿Cómo maneja Mockito las excepciones verificadas de manera diferente a las excepciones sin control


¿Cómo maneja Mockito las excepciones verificadas de manera diferente a las excepciones sin control


Mockito maneja las excepciones verificadas y sin control de manera diferente, principalmente debido a cómo Java trata estas excepciones y cómo Mockito está diseñado para funcionar con firmas de métodos.

Excepciones verificadas

- Definición: las excepciones verificadas son excepciones que se verifican en el momento de la compilación. Deben quedarse atrapados en un bloque de 'try-catch` o declararse en la firma del método utilizando la palabra clave' shots` [3].
- Mango de Mockito: Mockito permite arrojar excepciones verificadas desde un objeto simulado solo si la excepción se declara en la firma del método. Si intenta lanzar una excepción verificada que no se declare, Mockito lanzará un `MockitoException` con un mensaje que indica que la excepción verificada no es válida para ese método [1] [2]. Por ejemplo, si un método `void somemethod () lanza ioexception`, puede usar Mockito para lanzar un 'ioexception' sin problemas.

Excepciones sin control

- Definición: las excepciones sin control son excepciones que no se verifican en el momento de la compilación. Por lo general, son excepciones o errores de tiempo de ejecución que indican errores de programación [3].
- Mango de Mockito: Mockito puede manejar fácilmente excepciones sin control sin restricciones. Puede usar `Thenthrow ()` o `dothrow ()` para simular excepciones sin control como `runtimeException` o` nullPointerException` sin necesidad de que se declaren en la firma del método [1] [2]. Esto hace que sea sencillo probar el manejo de errores para condiciones inesperadas.

Solución para las excepciones verificadas

Si necesita lanzar una excepción verificada que no se declare en la firma del método, puede usar el método 'doanswer () `de Mockito. Este método le permite definir el comportamiento personalizado para un método simulado, incluidas las excepciones de lanzamiento que no se declaran en la firma del método [4]. Sin embargo, este enfoque requiere más manejo manual y generalmente es menos sencillo que usar `Thenthrow ()` o `dothrow ()`.

En resumen, el manejo de las excepciones verificadas de Mockito es más restrictivo porque se adhiere a los cheques de tiempo de compilación de Java, mientras que las excepciones sin control se pueden lanzar libremente, lo que hace que sean más fáciles de usar en las pruebas.

Citas:
[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-diferference-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-throw-exception