Todos los ejemplos que he leído y visto en videos de capacitación tienen ejemplos simplistas. Pero lo que no veo es cómo hago el código "real" después de obtener verde. ¿Es esta la parte "Refactor"?
Si tengo un objeto bastante complejo con un método complejo, y escribo mi prueba y lo mínimo para hacerla pasar (después de que falla, Rojo). ¿Cuándo vuelvo y escribo el código real? ¿Y cuánto código real escribo antes de volver a probar? Supongo que la última es más intuición.
Editar: Gracias a todos los que respondieron. Todas sus respuestas me ayudaron inmensamente. Parece que hay diferentes ideas sobre lo que preguntaba o confundía, y tal vez las hay, pero lo que preguntaba era, digamos que tengo una solicitud para construir una escuela.
En mi diseño, tengo una arquitectura con la que quiero comenzar, Historias de usuarios, etc. A partir de aquí, tomo esas Historias de usuario y creo una prueba para probar la Historia de usuario. El usuario dice: "Tenemos personas que se inscriben en la escuela y pagan las cuotas de inscripción". Entonces, pienso en una manera de hacer que eso falle. Al hacerlo, diseño una clase de prueba para la clase X (tal vez Estudiante), que fallará. Entonces creo la clase "Estudiante". Tal vez "Escuela" no lo sé.
Pero, en cualquier caso, el TD Design me obliga a pensar en la historia. Si puedo hacer que una prueba falle, sé por qué falla, pero esto presupone que puedo hacerla pasar. Se trata del diseño.
Me gusta esto al pensar en Recursión. La recursión no es un concepto difícil. Puede que sea más difícil seguirle la pista en la cabeza, pero en realidad, lo más difícil es saber cuándo la recursión se "rompe", cuándo detenerme (mi opinión, por supuesto). Por lo tanto, tengo que pensar en qué se detiene. La Recursión Primero. Es solo una analogía imperfecta, y asume que cada iteración recursiva es un "pase". De nuevo, solo una opinión.
En la implementación, la escuela es más difícil de ver. Los libros de contabilidad numéricos y bancarios son "fáciles" en el sentido de que puede usar aritmética simple. Puedo ver a + b y devolver 0, etc. En el caso de un sistema de personas, tengo que pensar más en cómo implementar eso. Tengo el concepto de fallar, aprobar, refactorizar (principalmente debido al estudio y esta pregunta).
En mi opinión, lo que no sé se basa en la falta de experiencia. No sé cómo dejar de inscribir a un nuevo estudiante. No sé cómo fallar a alguien escribiendo un apellido y guardándolo en una base de datos. Sé cómo hacer un +1 para las matemáticas simples, pero con entidades como una persona, no sé si solo estoy probando para ver si recupero una ID de base de datos única o algo más cuando alguien ingresa un nombre en un base de datos o ambos o ninguno.
O, quizás esto muestre que todavía estoy confundido.