Al usar Mockito para simulacros de excepciones, varias trampas comunes pueden hacer que sus pruebas sean menos efectivas o más difíciles de mantener. Estas son algunas de estas trampas y cómo evitarlos:
1.
Una de las trampas más significativas es la masazgo. Esto ocurre cuando se burla de demasiadas dependencias, lo que lleva a pruebas que son frágiles y difíciles de mantener. El en exceso puede hacer que las pruebas se concentren más en los simulacros que en el comportamiento real del sistema bajo prueba. Para evitar esto, concéntrese en burlarse solo de los colaboradores que tienen un comportamiento no trivial o aquellos cuyas interacciones desea verificar. Use instancias reales para colaboraciones simples [3].2. Excepciones no válidas **
Mockito asegura que la excepción que se lanza es válida para el método robado específico. Si intenta lanzar una excepción que no esté en la lista de excepciones verificadas del método, Mockito se quejará. Por ejemplo, si un método no declara `ioexception`, intentar burlarse de él para lanzar una 'IOException' dará como resultado un error [1]. Siempre asegúrese de que la excepción burlada sea válida para el método.3. Uso de `Thenthrow ()` con métodos nulo **
`When (). Thenthrow ()` no se puede usar con métodos vacíos porque no hay valor de retorno para burlarse. En su lugar, use `dothrow ()` para métodos vacíos. Mezclar estos métodos incorrectamente puede conducir a errores [2].4. Falta de especificidad **
Al burlarse de las excepciones, es crucial ser específico sobre qué excepciones está probando. Evite el exceso de burlas al enfocarse en excepciones relevantes para el escenario de prueba. Esto ayuda a mantener las pruebas enfocadas y mantenibles [2] [8].5. Manejo incorrecto de ejecuciones **
Asegúrese de que el código de aplicación esté preparado para manejar las excepciones correctamente, incluso cuando se burle de las pruebas. Esto incluye probar la lógica para manejar las excepciones para garantizar que se comporte como se esperaba [2].6. Uso de mensajes de error significativos **
Al burlarse de las excepciones, incluya mensajes significativos para ayudar a diagnosticar problemas si las pruebas fallan. Esta práctica mejora la claridad y la efectividad de sus pruebas [2].7. Lógica de manejo de excepciones de prueba **
Asegúrese de que el código maneje las excepciones como se esperaba. Esto implica verificar que la aplicación se comporta correctamente cuando se lanzan excepciones, lo cual es crucial para construir aplicaciones resilientes [2].8. Restablecimiento y limpieza de simulacros **
Mockito proporciona características como `reset ()` y `ClearInvocations ()` para manejar simulacros. Sin embargo, estos deben usarse con moderación. Restablecer un simulacro debe hacerse solo en casos raros, como cuando un contenedor inyecta un simulacro y no puede recrearse para cada prueba. La limpieza de las invocaciones puede ser útiles si recrear un simulacro conduciría a una sobrecarga significativa [1].Al ser consciente de estas trampas y seguir las mejores prácticas, puede usar efectivamente Mockito para burlarse de las excepciones y garantizar que sus pruebas sean robustas y mantenibles.
Citas:[1] https://www.toptal.com/java/a-guide-to-everyday-mockito
[2] https://www.browserstack.com/guide/mockito-throw-exception
[3] https://javanexus.com/blog/avoiding-mockito-testing-pitfalls
[4] https://stackoverflow.com/questions/9186604/mockito-exception-when-requires-an-argument-which-has-to-be-a-method-call-on
[5] https://stackoverflow.com/questions/22540108/best-practices-with-mockito
[6] https://stackoverflow.com/questions/52512548/mock-method-to-do-not-throw-an-exception/52514628
[7] https://contributors.scala-lang.org/t/mockito-testing-nulls-and-excepciones/3915
[8] https://www.janbasktraining.com/community/java/throw-checked-exceptions-from-mocks-with-mockito