Restablecer los simulacros en Mockito es una característica que le permite reutilizar objetos simulados al borrar sus renovantes e interacciones. Sin embargo, usar `reset ()` generalmente se desanima a menos que sea absolutamente necesario, ya que puede indicar pruebas mal estructuradas. Aquí hay algunas mejores prácticas para restablecer simulacros en Mockito:
Comprender cuándo usar `reset ()`
-Evite usar `reset ()`: la razón principal `reset ()` existe es admitir simulacros inyectados con contenedores, como los utilizados en el código heredado o las interfaces de terceros. En la mayoría de los casos, especialmente con un código basado en la prueba bien diseñado, debe evitar usar `reset ()` y en su lugar centrarse en crear métodos de prueba pequeños y enfocados [2] [4].
- Ofro de código: si se encuentra con la necesidad de usar `reset ()` dentro de un método de prueba, podría ser una señal de que sus pruebas son demasiado complejas o cubren demasiados escenarios. Esto podría indicar la necesidad de refactorizar sus pruebas o el código que se está probando [2].
Alternativas a `reset ()`
- Cree nuevos simulacros: en lugar de restablecer simulacros, considere crear nuevas instancias simuladas para cada método de prueba. Este enfoque asegura que cada prueba comience con una pizarra limpia, reduciendo el riesgo de interacciones de pruebas anteriores que afectan la actual [4].
- Use `ClearInvocations ()`: Si solo necesita borrar el historial de invocación (por ejemplo, para verificar las interacciones sin afectar el rastrojo), use `Mockito.ClearInvocations ()`. Este método elimina el historial de invocación sin restablecer los trozos, lo que puede ser útil en ciertos escenarios [4].
Las mejores prácticas para restablecer simulacros
- Reinicie después de cada prueba: si debe restablecer simulacros, hágalo después de cada método de prueba usando una anotación `@después de" en Junit o `Aftereach ()` en Scalatest. Esto asegura que cada prueba comience con un estado simulado limpio [3] [10].
- Evite restablecer antes de las pruebas: restablecer los simulacros antes de cada prueba puede conducir a la confusión sobre en qué estado se encuentra el simulacro al comienzo de la prueba. En general, es más claro crear nuevos simulacros o restablecer después de las pruebas [10].
- Use características del marco: en marcos como Spring, utilizando anotaciones como `@Mockbean` puede manejar automáticamente el restablecimiento simulado después de cada prueba, eliminando la necesidad de reinicios manuales [10].
Conclusión
Si bien Mockito proporciona el método `reset ()` para casos de uso específicos, generalmente es aconsejable evitar su uso a favor del diseño de prueba más limpio y más enfocado. Al crear nuevos simulacros para cada prueba o usar características del marco para administrar el estado simulado, puede garantizar pruebas robustas y mantenibles sin la necesidad de reinicios manuales.
Citas:[1] https://www.tutorialspoint.com/mockito/mockito_resetting_mock.htm
[2] https://site.mockito.org/javadoc/current/org/mockito/mockito.html
[3] https://twitter.github.io/finatra/user-guide/testing/mocks.html
[4] https://softwareEngineering.stackexchange.com/questions/188299/is-this-an-aproprate-use-of-mockitos-reset-method
[5] https://github.com/mockito/mockito-kotlin/issues/513
[6] https://symflower.com/en/company/blog/2024/how-to-do-mocking-spring-boot/
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.reset
[8] https://github.com/mockito/mockito/issues/183
[9] https://www.toptal.com/java/a-guide-to-everyday-mockito
[10] https://stackoverflow.com/questions/18164123/how-to-clean-up-mocks-in-spring-tests-when-using-mockito