¿Cuál es el mejor curso de acción en TDD si, después de implementar la lógica correctamente, la prueba todavía falla (porque hay un error en la prueba)?
Por ejemplo, suponga que desea desarrollar la siguiente función:
int add(int a, int b) {
return a + b;
}
Supongamos que lo desarrollamos en los siguientes pasos:
Prueba de escritura (aún no funciona):
// test1 Assert.assertEquals(5, add(2, 3));
Resultados en el error de compilación.
Escriba una implementación de función ficticia:
int add(int a, int b) { return 5; }
Resultado:
test1
pases.Agregue otro caso de prueba:
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));
Resultado:
test2
falla,test1
aún pasa.Escribir implementación real:
int add(int a, int b) { return a + b; }
Resultado:
test1
todavía pasa,test2
todavía falla (desde11 != 12
).
En este caso particular: ¿sería mejor:
- correcto
test2
, y ver que ahora pasa, o - elimine la nueva parte de la implementación (es decir, regrese al paso 2 anterior), corríjala
test2
y deje que falle, y luego reintroduzca la implementación correcta (paso 4 anterior).
¿O hay alguna otra forma más inteligente?
Si bien entiendo que el problema del ejemplo es bastante trivial, estoy interesado en qué hacer en el caso genérico, que podría ser más complejo que la suma de dos números.
EDITAR (en respuesta a la respuesta de @Thomas Junk):
El foco de esta pregunta es lo que TDD sugiere en tal caso, no lo que es "la mejor práctica universal" para lograr un buen código o pruebas (que podrían ser diferentes a la forma TDD).