Quelle est la meilleure ligne de conduite dans TDD si, après avoir correctement implémenté la logique, le test échoue toujours (car il y a une erreur dans le test)?
Par exemple, supposons que vous souhaitiez développer la fonction suivante:
int add(int a, int b) {
return a + b;
}
Supposons que nous le développions dans les étapes suivantes:
Test d'écriture (pas encore de fonction):
// test1 Assert.assertEquals(5, add(2, 3));
Résultats en erreur de compilation.
Écrivez une implémentation de fonction factice:
int add(int a, int b) { return 5; }
Résultat:
test1
passe.Ajoutez un autre scénario de test:
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));
Résultat:
test2
échoue,test1
passe toujours.Écrivez une implémentation réelle:
int add(int a, int b) { return a + b; }
Résultat:
test1
passetest2
toujours, échoue toujours (depuis11 != 12
).
Dans ce cas particulier: serait-il préférable de:
- correct
test2
, et voyez qu'il passe maintenant, ou - supprimez la nouvelle partie de l'implémentation (c.-à-d. revenez à l'étape 2 ci-dessus), corrigez
test2
et laissez-la échouer, puis réintroduisez l'implémentation correcte (étape 4 ci-dessus).
Ou existe-t-il un autre moyen plus intelligent?
Bien que je comprenne que l'exemple du problème est plutôt trivial, je suis intéressé par ce qu'il faut faire dans le cas générique, qui pourrait être plus complexe que l'ajout de deux nombres.
EDIT (En réponse à la réponse de @Thomas Junk):
Le point central de cette question est ce que TDD suggère dans un tel cas, et non ce qui est "la meilleure pratique universelle" pour obtenir un bon code ou des tests (qui pourraient être différents de la méthode TDD).