Pourquoi les tests C# ne sont pas effrayants, mais rentables ?
\n\nSi vous débutez tout juste en C# et avez entendu dire qu'« un bon développeur écrit toujours des tests », mais n'avez aucune idée par où aborder cette bête — vous êtes au bon endroit. Tester du code effraie souvent les débutants : cela semble complexe, nécessitant des connaissances approfondies en architecture et des tonnes de configurations. En réalité, écrire des tests en C# est une compétence que l'on peut maîtriser en une soirée, et dont les bénéfices dureront des années.
\n\nImaginez que vous ayez assemblé un mécanisme complexe avec des milliers de pièces. Vous ne le mettriez pas en marche à pleine puissance sans vérifier chaque composant, n'est-ce pas ? Il en va de même pour un programme : les tests unitaires C# permettent de vérifier chaque « rouage » de votre code individuellement, sans attendre que tout le système s'effondre en production. Dans cet article, nous aborderons les tests C# à partir de zéro : du choix du framework à l'écriture de votre premier test significatif. C'est parti !
\n\nPar où commencer les tests en C# : préparation de l'environnement
\n\nAvant d'écrire du code, assurons-nous que vous avez tout le nécessaire. Pour tester en C#, vous aurez besoin de :
\n- \n
- Visual Studio 2022 (édition Community — gratuite) ou JetBrains Rider (si vous avez une licence). \n
- .NET SDK (version 6, 7 ou 8 — n'importe quelle LTS convient). \n
- Une compréhension de base de la POO en C# : classes, méthodes, interfaces. \n
Une fois l'environnement prêt, créez un nouveau projet. Je recommande de séparer immédiatement le code en deux projets : le projet principal (votre bibliothèque ou application) et le projet de test. Dans Visual Studio, cela se fait avec la commande : File → New → Project → xUnit Test Project (.NET Core) ou NUnit Test Project. Mais nous irons un peu plus loin et examinerons les deux outils populaires.
Choisir un framework : NUnit vs xUnit
\n\nDans le monde C#, il y a deux principaux « acteurs » pour écrire des tests unitaires : NUnit et xUnit. Les deux fonctionnent très bien, mais il y a des nuances :
\n\n- \n
- NUnit — un classique venu de Java (équivalent de JUnit). Il utilise les attributs
[Test],[SetUp],[TearDown]. Très visuel pour les débutants. \n - xUnit — un framework moderne créé par les développeurs d'ASP.NET. Il utilise
[Fact]et[Theory]. Considéré comme plus « propre » et mieux intégré avec .NET Core. \n
Pour les débutants, je conseille xUnit — il est plus simple, ne nécessite pas d'attributs superflus, et est plus facile à comprendre. Mais si votre équipe utilise NUnit — pas de problème, nous aborderons les deux options.
\n\nPremier test unitaire en C# : écrire du code
\n\nSupposons que nous ayons une simple classe calculatrice :
\n\npublic class Calculator\n{\n public int Add(int a, int b) => a + b;\n \n public int Divide(int a, int b)\n {\n if (b == 0)\n throw new DivideByZeroException("Division par zéro impossible !");\n return a / b;\n }\n}\n\nÉcrivons maintenant des tests pour cette classe. Créez un projet de test (xUnit) et ajoutez une référence au projet principal.
\n\nExemple de test avec xUnit
\n\nusing Xunit;\n\npublic class CalculatorTests\n{\n [Fact]\n public void Add_ShouldReturnSum_WhenTwoNumbers()\n {\n // Arrange\n var calculator = new Calculator();\n \n // Act\n var result = calculator.Add(3, 5);\n \n // Assert\n Assert.Equal(8, result);\n }\n \n [Fact]\n public void Divide_ShouldThrowException_WhenDivideByZero()\n {\n var calculator = new Calculator();\n \n Assert.Throws<DivideByZeroException>(() => calculator.Divide(10, 0));\n }\n}\n\nRemarquez la structure Arrange-Act-Assert (AAA). C'est le standard en or pour écrire des tests : d'abord préparer les données, puis exécuter l'action, ensuite vérifier le résultat. Retenez ce modèle — il vous sauvera du chaos