Pourquoi "les tests d'abord" n'est pas du masochisme, mais un super-pouvoir
\n\nImaginez : vous écrivez du code, tout fonctionne. Vous êtes heureux. Un mois plus tard, vous revenez sur le projet, vous modifiez une ligne – et tout casse. Ça vous dit quelque chose ? Bienvenue dans le club des développeurs qui n'écrivent pas de tests. Imaginez maintenant une autre réalité : vous modifiez le code, vous lancez les tests – et en 10 secondes, vous savez que rien n'est cassé. Ce n'est pas de la magie, c'est le TDD (Test-Driven Development) – le développement piloté par les tests.
\n\nDans cet article, nous allons décortiquer le TDD avec l'exemple du C#. Pas de théorie ennuyeuse. Seulement de la pratique, du code et des cas concrets. Si vous pensez que le TDD est réservé aux "architectes purs" ou aux "monstres d'entreprise", vous allez être surpris. C'est un outil qui sauvera votre code et vos nerfs.
\n\nQu'est-ce que le TDD et comment fonctionne Red-Green-Refactor
\n\nLe TDD ne concerne pas les tests. Il concerne la conception. Vous n'écrivez pas les tests après le code, mais l'inverse : d'abord le test, ensuite le code minimal qui le fait passer, et seulement ensuite le refactoring. Ce cycle s'appelle Red-Green-Refactor :
\n\n- \n
- Red – on écrit un test qui échoue volontairement (rouge). \n
- Green – on écrit le code minimal pour que le test réussisse (vert). \n
- Refactor – on améliore le code sans changer son comportement. \n
Cela vous semble étrange ? Prenons un exemple. Supposons que nous ayons besoin d'une calculatrice avec une méthode d'addition. Habituellement, on écrit la classe, puis le test. En TDD, c'est l'inverse.
\n\nÉtape 1 : Red – on écrit un test qui va échouer
\n\nusing NUnit.Framework;\n\n[TestFixture]\npublic class CalculatorTests\n{\n [Test]\n public void Add_ShouldReturnSumOfTwoNumbers()\n {\n // Arrange\n var calculator = new Calculator();\n \n // Act\n var result = calculator.Add(2, 3);\n \n // Assert\n Assert.AreEqual(5, result);\n }\n}\n\nOn lance – le test échoue, car la classe Calculator n'existe pas. Rouge, c'est normal. Maintenant, notre objectif est de passer au vert.
\n\nÉtape 2 : Green – un minimum de code pour que le test réussisse
\n\npublic class Calculator\n{\n public int Add(int a, int b)\n {\n return a + b; // Implémentation minimale\n }\n}\n\nLe test est vert. Youpi. Mais le code est encore moche. Passons à l'étape 3.
\n\nÉtape 3 : Refactor – on améliore sans casser
\n\nÀ cette étape, on peut ajouter des vérifications, la gestion des exceptions ou modifier l'architecture. L'essentiel est que les tests restent verts.
\n\npublic class Calculator\n{\n public int Add(int a, int b)\n {\n if (a < 0 || b < 0)\n throw new ArgumentException("Only positive numbers allowed");\n return a + b;\n }\n}\n\nLe test va-t-il échouer ? Oui. Il faut donc mettre à jour le test ou modifier la logique. En TDD, le refactoring est toujours un dialogue avec les tests.
\n\nComment choisir un framework pour le TDD en C# : NUnit vs xUnit
\n\nEn C#, il existe trois frameworks populaires : NUnit, xUnit et MSTest. Nous allons examiner les deux premiers, car ce sont les plus flexibles.
\n\n| Critère | \nNUnit | \nxUnit | \n
|---|---|---|
| Attributs | \n[Test], [SetUp] | \n[Fact], [Theory] | \n
| Paramétrage | \n[TestCase] | \n[InlineData] | \n