El método `reset ()` de Mockito es una característica que le permite restablecer un objeto simulado para que pueda reutilizarse. Sin embargo, su uso generalmente es desanimado por los desarrolladores y usuarios de Mockito, ya que puede indicar pruebas o código mal diseñados que es demasiado complejo y difícil de probar limpiamente [7] [9]. En cambio, el enfoque recomendado es crear nuevos simulacros para cada método de prueba para garantizar la independencia y la claridad en las pruebas [7] [9].
Comparación con otras bibliotecas de burla
1. JMock2: a diferencia de Mockito, JMock2 utiliza un contexto para administrar las expectativas y la información simulada, que se reconstruye para cada método de prueba. Esto significa que JMock2 no requiere un reinicio explícito como Mockito [10]. El enfoque de JMOCK2 ayuda a mantener el aislamiento de la prueba sin necesidad de restablecer manualmente las simulacros.
2. EasyMock: EasyMock tampoco requiere un método de reinicio. Está diseñado para crear nuevos objetos simulados para cada prueba, similar a la práctica recomendada con Mockito. Szczepan Faber, un desarrollador de Mockito, menciona que nunca necesitó una función de reinicio mientras usaba EasyMock [8].
3. Mockito vs. Otras bibliotecas: en general, otras bibliotecas burladas como JMock2 y EasyMock promueven un enfoque de prueba más limpio al administrar automáticamente el estado simulado o alentar la creación de nuevos simulacros para cada prueba. El método `reset ()` de Mockito es más una excepción que la norma en los marcos de burla.
Las mejores prácticas
- Evite usar `reset ()`: a menos que sea absolutamente necesario, como cuando un contenedor inyecta un simulacro y no se puede recrear para cada prueba, es aconsejable evitar usar `reset ()`. En su lugar, concéntrese en crear pruebas simples y enfocadas con nuevos simulacros para cada escenario [7] [9].
- Use `ClearInvocations ()`: Si necesita borrar interacciones sin restablecer el rastrojo, use `ClearInvocations ()`. Este método le permite preservar el fragmento mientras limpia las interacciones grabadas, lo que puede ser útil en ciertos escenarios [5].
- Código de refactores para la capacidad de prueba: si se encuentra con la necesidad de usar `reset ()` con frecuencia, puede indicar que su código podría beneficiarse de la refactorización para que sea más comprobable. Esto podría implicar desglosar métodos complejos o mejorar la inyección de dependencia [9].
En resumen, mientras Mockito proporciona un método `reset ()`, su uso generalmente se desaconseja a favor de crear nuevos simulacros para cada prueba. Otras bibliotecas de burla a menudo promueven prácticas similares, enfatizando pruebas limpias e independientes sobre el manejo simulado complejo.
Citas:[1] https://www.tutorialspoint.com/mockito/mockito_resetting_mock.htm
[2] https://groups.google.com/g/mockito/c/y_ihdc8lx_m
[3] https://www.vogella.com/tutorials/mockito/article.html
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.reset
[5] https://www.toptal.com/java/a-guide-to-everyday-mockito
[6] https://www.jrebel.com/blog/mock-unit-testing-with-mockito
[7] https://stackoverflow.com/questions/34412106/appropropiate-use-of-mockito-reset
[8] https://groups.google.com/g/mockito/c/_vxg33tlzl8
[9] https://softwareEngineering.stackexchange.com/questions/188299/is-this-an-aproprate-use-of-mockitos-reset-method
[10] https://stackoverflow.com/questions/18164123/how-to-clean-up-mocks-in-spring-tests-when-using-mockito