Estoy refactorizando una gran clase de código heredado. La refactorización (supongo) aboga por esto:
- escribir pruebas para la clase heredada
- refactorizar al diablo de la clase
Problema: una vez que refactorice la clase, mis pruebas en el paso 1 deberán cambiarse. Por ejemplo, lo que una vez estuvo en un método heredado, ahora puede ser una clase separada. Lo que era un método puede ser ahora varios métodos. Todo el paisaje de la clase heredada puede ser borrado en algo nuevo, por lo que las pruebas que escribo en el paso 1 serán casi nulas y sin efecto. En esencia, agregaré el Paso 3. reescriba mis pruebas profusamente
¿Cuál es el propósito de escribir pruebas antes de refactorizar? Suena más como un ejercicio académico de crear más trabajo para mí. Estoy escribiendo pruebas para el método ahora y estoy aprendiendo más sobre cómo probar cosas y cómo funciona el método heredado. Uno puede aprender esto simplemente leyendo el código heredado, pero escribir pruebas es casi como frotarme la nariz y también documentar este conocimiento temporal en pruebas separadas. De esta manera, casi no tengo más remedio que aprender qué está haciendo el código. Dije temporal aquí, porque refactorizaré el código y toda mi documentación y pruebas serán nulas e inválidas durante una parte significativa, excepto que mi conocimiento se mantendrá y me permitirá estar más fresco en la refactorización.
¿Es esa la verdadera razón para escribir pruebas antes de refactorizar, para ayudarme a comprender mejor el código? Tiene que haber otra razón!
¡Por favor explique!
Nota:
Existe esta publicación: ¿Tiene sentido escribir pruebas para el código heredado cuando no hay tiempo para una refactorización completa? pero dice "escribir pruebas antes de refactorizar", pero no dice "por qué" o qué hacer si "escribir pruebas" parece "trabajo ocupado que se destruirá pronto"