Esta podría ser una pregunta bastante tonta ya que estoy en mis primeros intentos de TDD. Me encantó la sensación de confianza que brinda y, en general, una mejor estructura de mi código, pero cuando comencé a aplicarlo en algo más grande que los ejemplos de juguetes de una clase, me encontré con dificultades.
Supongamos que estás escribiendo una especie de biblioteca. Sabe lo que tiene que hacer, conoce una forma general de cómo se supone que debe implementarse (en cuanto a la arquitectura), pero sigue "descubriendo" que necesita realizar cambios en su API pública a medida que codifica. Quizás necesite transformar este método privado en un patrón de estrategia (y ahora debe aprobar una estrategia simulada en sus pruebas), quizás haya perdido una responsabilidad aquí y allá y dividir una clase existente.
Cuando está mejorando el código existente, TDD parece encajar muy bien, pero cuando escribe todo desde cero, la API para la que escribe las pruebas es un poco "borrosa" a menos que haga un gran diseño por adelantado. ¿Qué haces cuando ya tienes 30 pruebas en el método que cambió su firma (y para esa parte, el comportamiento)? Esas son muchas pruebas para cambiar una vez que se suman.