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:
test1passe.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,test1passe toujours.Écrivez une implémentation réelle:
int add(int a, int b) { return a + b; }Résultat:
test1passetest2toujours, é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
test2et 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).