AIDE .NET

C# Unit Testing (Comment ça marche pour les développeurs)

Publié avril 3, 2024
Partager:

Introduction aux tests unitaires en C# ;

Tests unitaires est une phase critique du développement de logiciels, qui aide les développeurs à vérifier la fonctionnalité des différentes unités du code source. En C#, les tests unitaires permettent de s'assurer que chaque composant ou méthode fonctionne correctement dans diverses conditions. En isolant chaque partie du programme et en montrant que chaque partie est exempte d'erreurs, les tests unitaires contribuent de manière significative à la fiabilité de votre application. Dans cet article, nous allons explorer les bases du projet de test unitaire C# et Bibliothèque IronPDF.

Mise en place de votre premier test unitaire dans Visual Studio

Création d'un projet de test d'unité

Pour commencer les tests unitaires en C#, vous devez mettre en place l'un des projets de tests unitaires dans Visual Studio. Visual Studio fournit un cadre de test unitaire intégré, ce qui facilite le démarrage. Lorsque vous créez un nouveau projet, sélectionnez le modèle "Projet de test d'unité" dans la catégorie C#. Ce modèle met en place tout ce dont vous avez besoin pour créer des tests unitaires et les exécuter efficacement.

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
namespace Unit_Test_Project_Example
{
    public class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
    [TestClass]
    public class CalculatorTests
    {
        [TestMethod]
        public void Add_ShouldReturnCorrectSum()
        {
            // Arrange
            var calculator = new Calculator();
            // Act
            var result = calculator.Add(2, 2);
            // Assert
            Assert.AreEqual(4, result);
        }
    }
}
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
namespace Unit_Test_Project_Example
{
    public class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
    [TestClass]
    public class CalculatorTests
    {
        [TestMethod]
        public void Add_ShouldReturnCorrectSum()
        {
            // Arrange
            var calculator = new Calculator();
            // Act
            var result = calculator.Add(2, 2);
            // Assert
            Assert.AreEqual(4, result);
        }
    }
}
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System
Namespace Unit_Test_Project_Example
	Public Class Calculator
		Public Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
			Return a + b
		End Function
	End Class
	<TestClass>
	Public Class CalculatorTests
		<TestMethod>
		Public Sub Add_ShouldReturnCorrectSum()
			' Arrange
			Dim calculator As New Calculator()
			' Act
			Dim result = calculator.Add(2, 2)
			' Assert
			Assert.AreEqual(4, result)
		End Sub
	End Class
End Namespace
VB   C#

Comprendre les méthodes de test et les classes de test

Dans un projet de test unitaire, les tests sont organisés en classes et en méthodes. Une classe de test représente une collection de méthodes de test unitaire qui doivent être exécutées ensemble. Chaque méthode de test unitaire, agrémentée de l'élément [Méthode de test]l'attribut contient la logique permettant de tester une fonction spécifique de votre code. La classe de test elle-même est marquée par le symbole [TestClass]**, signalant au cadre de test qu'il contient des tests à exécuter.

Exécuter et comprendre vos tests

Utilisation de l'explorateur de tests dans Visual Studio

La fenêtre de l'explorateur de tests de Visual Studio est le point central pour l'exécution et la gestion de toutes les méthodes de test. Vous pouvez exécuter tous les tests, une sélection de tests ou des tests individuels. Après l'exécution des tests, l'explorateur de tests fournit un résumé détaillé des tests réussis et échoués, ce qui vous permet d'identifier rapidement les problèmes et d'y remédier.

Interprétation des résultats des tests

  • Tests réussis : Ces tests se sont déroulés avec succès, ce qui indique que le code testé se comporte comme prévu dans les conditions spécifiées.
  • Tests échoués : Ils indiquent une divergence entre les résultats attendus et les résultats réels, signalant des bogues potentiels ou des malentendus dans les exigences ou le code de test.

    Il est essentiel d'examiner rapidement les tests qui ont échoué, car ils peuvent fournir des signes précurseurs de problèmes dans votre base de code.

    Tests unitaires en C# (Comment ça marche pour les développeurs) : Figure 1 - Exemple de test unitaire réussi dans Visual Studio

Techniques avancées et meilleures pratiques pour l'écriture de tests unitaires C

Au-delà de la simple rédaction et de l'exécution de tests, la maîtrise des tests unitaires en C# passe par la compréhension de certaines techniques avancées et des meilleures pratiques. Ces approches peuvent vous aider à rédiger des tests plus efficaces et plus performants, garantissant ainsi la fiabilité et la maintenabilité de votre application.

Organiser les tests de manière efficace

Une bonne organisation est essentielle pour maintenir une large suite de tests. Regroupez vos tests de manière logique en fonction de la fonctionnalité qu'ils couvrent. Utilisez des noms descriptifs pour vos méthodes et classes de test afin d'indiquer ce que chaque test vérifie. Cette approche facilite la recherche et la compréhension des tests par la suite, en particulier lorsque votre suite de tests s'étoffe.

Mocking et injection de dépendances

Souvent, le code que vous testez interagit avec des ressources externes ou d'autres parties de votre application. Dans ce cas, utilisez des cadres de simulation comme Moq ou NSubstitute pour créer des objets de simulation. Ces substituts imitent le comportement des objets réels, ce qui vous permet de tester votre code de manière isolée. L'injection de dépendances rend votre code plus testable, car elle vous permet de remplacer les dépendances réelles par des mocks ou des stubs pendant les tests.

// Example of using a mock
[TestClass]
public class ProductServiceTests
{
    [TestMethod]
    public void GetProductById_ShouldReturnCorrectProduct()
    {
        // Arrange
        var mockRepository = new Mock<IProductRepository>();
        mockRepository.Setup(x => x.FindById(1)).Returns(new Product { Id = 1, Name = "Laptop" });
        ProductService productService = new ProductService(mockRepository.Object);
        // Act
        Product result = productService.GetProductById(1);
        // Assert
        Assert.IsNotNull(result);
        Assert.AreEqual("Laptop", result.Name);
    }
}
// Example of using a mock
[TestClass]
public class ProductServiceTests
{
    [TestMethod]
    public void GetProductById_ShouldReturnCorrectProduct()
    {
        // Arrange
        var mockRepository = new Mock<IProductRepository>();
        mockRepository.Setup(x => x.FindById(1)).Returns(new Product { Id = 1, Name = "Laptop" });
        ProductService productService = new ProductService(mockRepository.Object);
        // Act
        Product result = productService.GetProductById(1);
        // Assert
        Assert.IsNotNull(result);
        Assert.AreEqual("Laptop", result.Name);
    }
}
' Example of using a mock
<TestClass>
Public Class ProductServiceTests
	<TestMethod>
	Public Sub GetProductById_ShouldReturnCorrectProduct()
		' Arrange
		Dim mockRepository = New Mock(Of IProductRepository)()
		mockRepository.Setup(Function(x) x.FindById(1)).Returns(New Product With {
			.Id = 1,
			.Name = "Laptop"
		})
		Dim productService As New ProductService(mockRepository.Object)
		' Act
		Dim result As Product = productService.GetProductById(1)
		' Assert
		Assert.IsNotNull(result)
		Assert.AreEqual("Laptop", result.Name)
	End Sub
End Class
VB   C#

Utiliser des tests pilotés par les données

Les tests pilotés par les données vous permettent d'exécuter plusieurs fois la même méthode de test avec des données d'entrée différentes. Cette technique est particulièrement utile pour tester un large éventail d'entrées et de scénarios sans avoir à écrire plusieurs méthodes de test. Visual Studio prend en charge les tests pilotés par les données en vous permettant de spécifier vos données de test à partir de diverses sources, telles que les données en ligne, les fichiers CSV ou les bases de données.

Comprendre et utiliser efficacement les affirmations

Les assertions sont au cœur de vos méthodes de test, car elles valident les résultats de vos tests. Comprendre l'éventail des méthodes d'affirmation disponibles dans votre cadre de test et les utiliser de manière appropriée pour vérifier les valeurs attendues, les exceptions ou les conditions. L'utilisation du bon assert peut rendre vos tests plus clairs et plus robustes.

Intégration continue et automatisation des tests

Intégrer vos tests unitaires dans votre intégration continue (CI) pipeline. Cela garantit que les tests sont automatiquement exécutés chaque fois que des changements sont apportés à la base de code, ce qui permet de détecter et de résoudre les problèmes à un stade précoce. L'automatisation facilite également l'exécution fréquente et cohérente des tests, ce qui est essentiel pour maintenir une base de code saine.

Maintenir la synchronisation entre les tests et le code de production

La qualité de vos tests unitaires dépend de leur alignement sur le code de production. Veiller à ce que toute modification de la fonctionnalité soit reflétée dans les tests unitaires correspondants. Cette pratique permet d'éviter que des tests obsolètes soient mal exécutés et garantit que votre suite de tests représente fidèlement l'état de votre application.

Tirer les leçons des échecs aux tests

Lorsqu'un test échoue, c'est l'occasion d'apprendre et de s'améliorer. Un test qui échoue peut révéler des comportements inattendus, des hypothèses incorrectes ou des zones de votre code qui sont plus complexes et sujettes aux erreurs que nécessaire. Analysez soigneusement les tests qui échouent pour en comprendre les causes sous-jacentes et utilisez ces informations pour améliorer à la fois vos tests et votre code de production.

Présentation d'IronPDF

Tests unitaires en C# (Comment ça marche pour les développeurs) : Figure 2 - Site web d'IronPDF

IronPDF est une bibliothèque complète conçue pour les développeurs .NET, leur permettant de générer, manipuler et lire des documents PDF dans leurs applications. IronPDF est connu pour sa capacité à générer des PDF directement à partir de HTML les codes, les CSS, les images et le JavaScript pour créer les meilleurs PDF. Il prend en charge un large éventail de types de projets .NET et d'environnements applicatifs, notamment les applications web et de bureau, les services et plus encore, sur divers systèmes d'exploitation tels que Windows, Linux et macOS, ainsi que dans des environnements Docker et cloud tels qu'Azure et AWS.

Exemple de code

Voici un exemple d'utilisation d'IronPDF dans un scénario de test unitaire C#. Supposons que vous souhaitiez tester une fonction qui génère un PDF à partir d'un contenu HTML. Vous pouvez utiliser IronPDF pour convertir le code HTML en PDF, puis vérifier l'existence ou le contenu du PDF dans le cadre de votre test :

using IronPdf;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.ComponentModel;
using System.IO;
[TestClass]
public class PdfGenerationTests
{
    [TestMethod]
    public void TestHtmlToPdfGeneration()
    {
        IronPdf.License.LicenseKey = "License-Key";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, world!</h1>");
        string filePath = Path.Combine(Path.GetTempPath(), "test.pdf");
        pdf.SaveAs(filePath);
        Assert.IsTrue(File.Exists(filePath), "The generated PDF does not exist.");
        // Additional assertions to verify the PDF content could be added here
        // Clean up
        File.Delete(filePath);
    }
}
using IronPdf;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.ComponentModel;
using System.IO;
[TestClass]
public class PdfGenerationTests
{
    [TestMethod]
    public void TestHtmlToPdfGeneration()
    {
        IronPdf.License.LicenseKey = "License-Key";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, world!</h1>");
        string filePath = Path.Combine(Path.GetTempPath(), "test.pdf");
        pdf.SaveAs(filePath);
        Assert.IsTrue(File.Exists(filePath), "The generated PDF does not exist.");
        // Additional assertions to verify the PDF content could be added here
        // Clean up
        File.Delete(filePath);
    }
}
Imports IronPdf
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System
Imports System.ComponentModel
Imports System.IO
<TestClass>
Public Class PdfGenerationTests
	<TestMethod>
	Public Sub TestHtmlToPdfGeneration()
		IronPdf.License.LicenseKey = "License-Key"
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello, world!</h1>")
		Dim filePath As String = Path.Combine(Path.GetTempPath(), "test.pdf")
		pdf.SaveAs(filePath)
		Assert.IsTrue(File.Exists(filePath), "The generated PDF does not exist.")
		' Additional assertions to verify the PDF content could be added here
		' Clean up
		File.Delete(filePath)
	End Sub
End Class
VB   C#

Cet exemple présente un test unitaire simple qui utilise IronPDF pour générer un PDF à partir d'une chaîne HTML, l'enregistrer dans un fichier temporaire, puis vérifier l'existence du fichier.

Tests unitaires en C# (Comment ça marche pour les développeurs) : Figure 3 - Test précédent réussi

Conclusion

Tests unitaires C# (Comment cela fonctionne-t-il pour les développeurs ?) (Tests unitaires en C# (Comment cela fonctionne pour les développeurs) : Figure 4 - Page de licence d'IronPDF

Les tests unitaires sont un élément indispensable du cycle de développement des logiciels. En mettant en place et en écrivant des tests efficaces, en les exécutant via l'explorateur de tests de Visual Studio et en utilisant des outils de couverture de code, vous vous assurez que vos applications C# sont fiables et qu'elles respectent des normes de haute qualité. En comprenant et en appliquant les principes du développement piloté par les tests, vous pouvez encore améliorer la qualité de vos projets de tests unitaires en C#. N'oubliez pas que l'objectif des tests unitaires n'est pas seulement de trouver des bogues, mais de créer une base solide pour votre application, qui facilite les mises à jour, le débogage et l'ajout de fonctionnalités. IronPDFavec des options de licence commençant à $749.

< PRÉCÉDENT
Modèle CQRS C# (Comment ça marche pour les développeurs)
SUIVANT >
Encodage d'URL en C# (Comment ça marche pour les développeurs)