Para escribir pruebas antes del código, debe tener una forma de interactuar con el código. Las pruebas tienden a definir las interfaces mucho antes de tiempo para que las pruebas puedan escribirse.TDD supone que las interfaces ya están definidas; ¿como hacer frente?
Pero a menudo desarrollar una buena implementación implica inventar un conjunto de buenas interfaces entre componentes, ajustar y rehacer estas interfaces muchas veces. Durante esto, puede continuar reescribiendo buenas partes del código de prueba o permitir que las pruebas se retrasen con respecto al código.
¿Existen mejores prácticas para aliviar esto?
Luché mucho con esto, ya que intenté entrar en el desarrollo impulsado por pruebas antes de tener mucha experiencia con cualquier tipo de programación. Eventualmente me di cuenta de que las pruebas pueden confirmar que el código funciona como esperabas, pero no puede verificar si tienes un buen diseño, y si tu diseño cambia a medida que se desarrolla el código (como probablemente sucederá), solo tendrás para reescribir algunas pruebas. Supongo que eso alienta a prestar mucha atención al diseño del código, lo cual es algo bueno. En algunos casos, puede ser una buena idea hacer un prototipo desechable, sin pruebas, para trabajar primero en el diseño de la interfaz. –