Cuando se producen cambios importantes en el código (nuevo conjunto de POJO, refactorización de aplicaciones importantes, etc.), las pruebas unitarias tienden a comentarse en lugar de modificarse.
Siempre trato de mantener la refactorización y el cambio de funcionalidad por separado. Cuando necesito hacer ambas cosas, generalmente primero cometo la refactorización.
Cuando se refactoriza el código sin cambiar la funcionalidad, se supone que las pruebas unitarias existentes ayudan a garantizar que la refactorización no rompa accidentalmente la funcionalidad. Entonces, para tal confirmación, consideraría deshabilitar o eliminar las pruebas unitarias como una señal de advertencia importante. Se debe decir a cualquier desarrollador que lo haga que no lo haga cuando se revise el código.
Es posible que los cambios que no cambian la funcionalidad sigan causando que las pruebas unitarias fallen debido a pruebas unitarias defectuosas. Si comprende el código que está cambiando, la causa de tales fallas en las pruebas unitarias suele ser inmediatamente obvia y fácil de solucionar.
Por ejemplo, si una función toma tres argumentos, una prueba unitaria que cubra la interacción entre los dos primeros argumentos para la función podría no haberse ocupado de proporcionar un valor válido para el tercer argumento. Este defecto en la prueba de la unidad puede quedar expuesto por una refactorización del código probado, pero es fácil de solucionar si comprende lo que se supone que debe hacer el código y lo que está probando la prueba de la unidad.
Al cambiar la funcionalidad existente, generalmente será necesario cambiar también algunas pruebas unitarias. En este caso, las pruebas unitarias ayudan a garantizar que su código cambie la funcionalidad según lo previsto y no tenga efectos secundarios no deseados.
Al corregir errores o agregar nuevas funcionalidades, generalmente es necesario agregar más pruebas unitarias. Para aquellos, puede ser útil confirmar las pruebas unitarias primero y confirmar la corrección de errores o la nueva funcionalidad más adelante. Eso hace que sea más fácil verificar que las nuevas pruebas unitarias no pasaron con el código anterior pero sí con el código más nuevo. Sin embargo, este enfoque no carece por completo de inconvenientes, por lo que también existen argumentos a favor de confirmar las nuevas pruebas unitarias y las actualizaciones de código simultáneamente.
Se dedica mejor tiempo a las pruebas de integración que cubren casos de uso, lo que hace que las pruebas de menor alcance sean menos / nada importantes.
Hay algún elemento de verdad en esto. Si puede obtener cobertura de las capas inferiores de la pila de software con pruebas dirigidas a las capas superiores de la pila de software, sus pruebas pueden ser más útiles al refactorizar el código.
Sin embargo, no creo que encuentre un acuerdo sobre la distinción exacta entre una prueba unitaria y una prueba de integración. Y no me preocuparía si tiene un caso de prueba que un desarrollador llama una prueba unitaria y otro llama una prueba de integración, siempre que puedan estar de acuerdo en que es un caso de prueba útil.