Lors de l'exécution de TDD et de l'écriture d'un test unitaire, comment résister à l'envie de "tricher" lors de l'écriture de la première itération du code "d'implémentation" que vous testez?
Par exemple:
il faut que je calcule la factorielle d'un nombre. Je commence par un test unitaire (avec MSTest), par exemple:
[TestClass]
public class CalculateFactorialTests
{
[TestMethod]
public void CalculateFactorial_5_input_returns_120()
{
// Arrange
var myMath = new MyMath();
// Act
long output = myMath.CalculateFactorial(5);
// Assert
Assert.AreEqual(120, output);
}
}
J'exécute ce code, et il échoue car la CalculateFactorial
méthode n'existe même pas. J'écris donc maintenant la première itération du code pour implémenter la méthode sous test en écrivant le code minimum requis pour réussir le test.
Le problème, c’est que je suis toujours tenté d’écrire ce qui suit:
public class MyMath
{
public long CalculateFactorial(long input)
{
return 120;
}
}
Ceci est, sur le plan technique, correct en ce qu'elle vraiment est le code minimum requis pour faire ce test de passage spécifique (passer au vert), bien qu'il soit clairement un « tricher » , car il ne même pas vraiment tenter d'exécuter la fonction de calcul d' un factoriel. Bien entendu, la partie refactorisation devient désormais un exercice consistant à "écrire la fonctionnalité correcte" plutôt qu’une véritable refactorisation de la mise en oeuvre. Évidemment, l'ajout de tests supplémentaires avec différents paramètres échouera et forcera une refactorisation, mais vous devez commencer par ce test.
Ma question est donc la suivante: comment obtenez-vous cet équilibre entre "écrire le code minimum pour réussir le test" tout en le maintenant fonctionnel et dans l’esprit de ce que vous essayez réellement de réaliser?