TESTS UNITAIRES dans Asp.Net : didacticiel complet

⚡ Résumé intelligent

Les tests unitaires d'une application ASP.NET dans Visual Studio commencent par un projet de test unitaire, établissent une référence au projet cible, ajoutent les attributs MSTest [TestClass] et [TestMethod] et appellent les méthodes Assert pour prouver que les classes se comportent comme prévu.

  • 🧪 Projet test : Ajoutez un projet de test unitaire à la solution ASP.NET et référencez le projet cible que vous souhaitez vérifier.
  • 🏷️ Attributs: Marquez la classe avec [TestClass] et chaque test avec [TestMethod] afin que MSTest puisse les découvrir.
  • Affirmations : Utilisez Assert.AreEqual, Assert.IsTrue et des appels similaires pour déclarer le résultat attendu de chaque test.
  • ▶ ️ Exécuter les tests : Dans Visual Studio, cliquez sur le menu « Exécuter les tests », puis sélectionnez « Exécuter tous les tests » et examinez l’explorateur de tests pour connaître les résultats de réussite et d’échec.
  • Choix du cadre : MSTest, NUnit et xUnit fonctionnent tous avec dotnet test ; MSTest est fourni par défaut, xUnit est préféré pour ASP.NET Core.
  • Meilleure pratique : Isolez l'unité, suivez le cycle Arrange Act Assert et assurez-vous que la suite complète reste rapide pour qu'elle s'exécute à chaque commit.

Tests unitaires dans ASP.NET

Les tests sont un aspect essentiel de tout langage de programmation. Tests Cela est possible pour les applications ASP.NET grâce à Visual Studio.

Visual Studio sert à créer du code de test. Il permet également d'exécuter ce code pour une application ASP.NET. Ainsi, il devient facile de détecter les erreurs dans une application ASP.NET. Le module de test de Visual Studio est prêt à l'emploi. On peut donc exécuter immédiatement un test pour un projet ASP.NET.

Introduction aux tests pour ASP.NET

Le premier niveau de test d'un projet ASP.NET consiste en des tests unitaires. Ces tests vérifient la fonctionnalité de l'application et s'assurent qu'elle se comporte comme prévu. En ASP.NET, la première étape est de créer un projet de test dans Visual Studio. Ce projet contiendra le code nécessaire aux tests.

Prenons l'exemple de la page web ci-dessous. Sur cette page, on trouve le message « GuruLe message « 99 – ASP.NET » s’affiche. Comment vérifier que le message correct est affiché lors de l’exécution d’un projet ASP.NET ? Pour cela, il faut ajouter un projet de test à la solution ASP.NET (utilisée pour développer des applications web). Ce projet de test permettra de s’assurer que le bon message est affiché à l’utilisateur.

Introduction aux tests pour ASP.NET

Examinons maintenant plus en détail comment nous pouvons travailler sur les tests dans ASP.NET.

Création d'un projet de tests unitaires .NET

Avant de créer un projet de test, nous devons effectuer les étapes de haut niveau ci-dessous.

  1. Utilisez notre « DemoApplication » utilisée dans les sections précédentes. Ce sera notre application qui doit être testée.
  2. Nous allons ajouter une nouvelle classe à l'application de démonstration. Cette classe contiendra une chaîne de caractères appelée 'Guru99 – ASP.NET. Cette chaîne sera testée dans notre projet de test.
  3. Enfin, nous allons créer un projet de test. Celui-ci servira à tester l'application ASP.NET.

Suivons donc les étapes générales décrites ci-dessus et voyons comment mettre en œuvre les tests.

Étape 1) Assurez-vous que DemoApplication est ouvert dans Visual Studio.

Étape 2) Ajoutons maintenant une nouvelle classe à DemoApplication. Cette classe contiendra une chaîne de caractères appelée 'Guru99 – ASP.NET. Cette chaîne sera testée dans notre projet de test.

Suivez l'étape ci-dessous pour ajouter une nouvelle classe.

Création d'un projet de tests unitaires .NET

  1. Dans Visual Studio, cliquez avec le bouton droit sur « DemoApplication » dans l’Explorateur de solutions.
  2. Choisissez l'option Ajouter->Classe dans le menu contextuel.

Étape 3) Dans cette étape,

Création d'un projet de tests unitaires .NET

  1. Donnez un nom 'Tutorial.cs' pour la nouvelle classe.
  2. Cliquez sur le bouton « Ajouter » pour ajouter le fichier à l'application de démonstration.

Maintenant, une nouvelle classe est ajoutée au fichier « DemoApplication ».

Étape 4) Ouvrez le nouveau fichier Tutorial.cs depuis « DemoApplication ». Ajoutez la chaîne « Guru99 – ASP.NET.

Pour ouvrir le fichier, double-cliquez sur le fichier Tutorial.cs dans l'Explorateur de solutions.

Création d'un projet de tests unitaires .NET

Le fichier aura du code par défaut déjà écrit. Ne vous souciez pas de ce code, ajoutez simplement la ligne de code ci-dessous.

Création d'un projet de tests unitaires .NET

namespace DemoApplication
{
  public class Tutorial
  {
     public String Name;
     public Tutorial()
     {
        Name = "Guru99 - ASP.Net";
     }
  }
}

Code Explication:-

  1. La variable Nom est de type chaîne.
  2. Enfin, dans le constructeur de la classe Tutorial, assignez la valeur de la variable Name. La valeur est assignée à «Guru99 – ASP.NET”

Étape 5) Maintenant, ouvrez le fichier demo.aspx et ajoutez les lignes de code permettant d'afficher le texte « Guru99 – ASP.NET.

Création d'un projet de tests unitaires .NET

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
    <body>
    <form id="form1" runat="server">
    <div>
        <% DemoApplication.Tutorial tp=new DemoApplication.Tutorial();%>
        <%=tp.Name%>
    </div>
    </form>
    </body>
</html>

Code Explication:-

  1. La première ligne crée un objet de la classe « Tutorial ». C'est la première étape lorsqu'on travaille avec des classes et des objets. Cet objet est nommé « tp ».
  2. Enfin, nous appelons « tutorial.cs » à partir du fichier demo.aspx. Il affiche la valeur de la variable Nom.

Lorsque vous exécutez le programme ci-dessus dans Visual Studio, vous obtiendrez le résultat suivant.

Production:-

Création d'un projet de tests unitaires .NET

Le résultat affiche le message «Guru99 – ASP.NET” affiché.

Étape 6) Ajoutons maintenant notre projet de test à l'application de démonstration. Pour ce faire, nous utiliserons Visual Studio.

Création d'un projet de tests unitaires .NET

  1. Cliquez avec le bouton droit sur la solution – DemoApplication.
  2. Dans le menu contextuel, choisissez l'option 'Nouveau projet'.

Étape 7) L'étape implique l'ajout du projet Unit Test à l'application de démonstration.

Création d'un projet de tests unitaires .NET

  1. Cliquez sur le type d'élément « Test » dans le panneau de gauche.
  2. Choisissez l'élément « Projet de test unitaire » dans la liste qui apparaît dans la partie centrale de la boîte de dialogue.
  3. Donnez un nom au projet de test. Dans notre cas, le nom donné est « DemoTest ».
  4. Enfin, cliquez sur le bouton « OK ».

Vous verrez éventuellement le projet DemoTest ajouté à l'explorateur de solutions. Avec cela, vous pouvez également voir d'autres fichiers comme UnitTest1.cs, les propriétés, etc. sont générés par défaut.

Création d'un projet de tests unitaires .NET

Exécution du projet de test

Le projet de test créé précédemment sert à tester notre application ASP.NET. Nous allons maintenant voir comment exécuter ce projet.

  • La première étape consiste à ajouter une référence au projet ASP.NET. Cette étape permet au projet de test d'accéder au projet ASP.NET.
  • Ensuite, nous écrirons notre code de test.
  • Enfin, nous exécuterons le test à l'aide de Visual Studio.

Étape 1) Pour tester notre application de démonstration, le premier projet de test doit faire référence à l'application de démonstration. Ajoutez une référence à la solution Demo.aspx.

Exécution du projet de test .NET

  1. Cliquez avec le bouton droit sur le projet Demo Test
  2. Dans le menu, choisissez l’option Ajouter->Référence.

Étape 2) L'étape suivante consiste à ajouter une référence à DemoApplication.

Exécution du projet de test .NET

  1. Sélectionnez l'option Projets dans la partie gauche de la boîte de dialogue
  2. Cliquez sur la case à côté de DemoApplication
  3. Cliquez sur le bouton « OK ».

Cela permettra à un projet de démotest de tester notre DemoApplication.

Étape 3) Il est maintenant temps d'ajouter le code de test à notre projet de test.

  • Pour cela, double-cliquez d'abord sur le fichier UnitTest1 (le fichier UnitTest1 est automatiquement ajouté par Visual Studio lors de la création du projet Test) dans l'Explorateur de solutions.
  • Voici le fichier qui sera exécuté pour tester le projet ASP.NET.

Exécution du projet de test .NET

Vous verrez le code ci-dessous ajouté par Visual Studio dans le fichier UnitTest1.cs. Il s'agit du code de base nécessaire à l'exécution du projet de test.

Exécution du projet de test .NET

Étape 4) L'étape suivante consiste à ajouter le code qui sert à tester la chaîne «Guru99 – ASP.NET.

Exécution du projet de test .NET

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using DemoApplication;

namespace DemoTest
{
 [TestClass]
 public class UnitTest1
 {
   [TestMethod]
   public void TestMethod1()
   {
      Tutorial tp = new Tutorial();
      Assert.AreEqual(tp.Name,"Guru99 - ASP.Net");
   }
 }
}
  1. Créez un nouvel objet appelé 'tp' du type Tutorial
  2. La méthode Assert.AreEqual est utilisée en .NET pour tester si une valeur est égale à une autre. Dans notre cas, nous comparons donc les valeurs de tp.Name à Guru99 – ASP.NET.

Étape 5) À présent, lançons notre projet de test. Pour cela, il faut aller dans le menu Test -> Exécuter -> Tous les tests.

Exécution du projet de test .NET

Production:-

Exécution du projet de test .NET

Une fenêtre de l'Explorateur de tests apparaîtra dans Visual Studio. Cela affichera le résultat ci-dessus et indiquera qu'un test réussi a été exécuté dans Visual Studio.

Attributs et assertions MSTest que vous utiliserez

Le MicrosoftL'espace de noms `.VisualStudio.TestTools.UnitTesting` fournit un petit ensemble d'attributs et d'assertions qui couvrent la plupart des tests unitaires ASP.NET. Les maîtriser en premier lieu facilite la lecture et la maintenance des tests suivants.

  • [TestClass] – Indique que la classe est un conteneur de tests. MSTest analyse les classes possédant cet attribut lors de la découverte.
  • [Méthode de test] – désigne une méthode publique sans paramètre comme un test individuel. La méthode ne renvoie ni void, ni Task, ni ValueTask.
  • [Initialiser les tests] / [Nettoyer les tests] – Exécutez-les avant et après chaque méthode de test. Utilisez-les pour créer et supprimer des ressources partagées telles qu'un dépôt factice ou un contexte en mémoire.
  • [Initialisation de classe] / [Nettoyage de classe] – à exécuter une seule fois pour toute la classe. Ces scripts sont utiles lorsque la configuration est coûteuse, par exemple pour initialiser une base de données de test.
  • [DataRow] et [DataTestMethod] – fournir des entrées paramétrées afin qu'une seule méthode de test couvre plusieurs cas.

Dans chaque méthode de test, la classe Assert vérifie le résultat. Les appels courants incluent Assert.AreEqual pour les comparaisons de valeurs, Assert.IsTrue et Assert.IsFalse pour les booléens, Assert.IsNull et Assert.IsNotNull pour les références, et Assert.ThrowsException pour les exceptions attendues. Structurez chaque test selon le modèle Arrange, Act, Assert afin que la configuration, l'exécution et la vérification restent visuellement séparées. Cette structure facilite le débogage des tests en échec, car la ligne défaillante est presque toujours l'unique assertion située en bas du code.

Comparaison de MSTest, NUnit et xUnit pour ASP.NET

Trois frameworks de test dominent l'écosystème .NET. Chacun s'exécute dans Visual Studio et s'intègre à dotnet test ; la différence réside donc principalement dans le style, le support de la communauté et le comportement par défaut.

  • Test MSTest – expédié par Microsoft et est fourni avec le modèle de projet de tests unitaires Visual Studio utilisé précédemment dans ce tutoriel. Il s'agit du choix par défaut le plus sûr pour une équipe qui découvre les tests unitaires sur Visual Studio. Microsoft association.
  • Nunit – le plus ancien des trois, initialement porté depuis JUnitIl offre un modèle de contraintes riche, des tests paramétrés via TestCase et TestCaseSource, et une prise en charge mature pour toutes les versions de .NET.
  • xUnit.net Utilisé en interne par les équipes ASP.NET Core et Entity Framework Core, ce modèle remplace la méthode SetUp par un constructeur et l'interface IDisposable, préconise une classe de test par comportement et utilise [Fact] et [Theory] au lieu de [TestMethod].

Les trois frameworks détectent les tests via leurs attributs, les exécutent avec la commande dotnet test et produisent des rapports XML trx ou xUnit que les pipelines d'intégration continue tels que Azure DevOps, GitHub Actions et Jenkins Il est possible de l'utiliser directement. Pour un premier projet ASP.NET, l'utilisation de MSTest simplifie la chaîne d'outils. Les équipes qui souhaitent une paramétrisation plus poussée ou qui utilisent déjà ASP.NET Core optent souvent pour xUnit par souci de cohérence avec le framework utilisé lors de son développement.

Meilleures pratiques pour les tests unitaires des applications ASP.NET

Le respect de quelques bonnes habitudes permet de maintenir une suite d'applications rapide, fiable et utile tout au long du cycle de vie d'un projet ASP.NET.

  1. Tester un comportement par méthode. Un test qui affirme plusieurs choses sans rapport les unes avec les autres échoue pour de nombreuses raisons et prend plus de temps à corriger.
  2. Nommez les tests en fonction de l'intention. Un modèle tel que MethodUnderTest_Scenario_ExpectedResult permet à l'explorateur de tests de générer une spécification lisible de la classe.
  3. Isolez l'unité des systèmes externes. Encapsulez les appels de fichiers, de réseau et de base de données derrière des interfaces et remplacez-les par des valeurs factices ou simulées afin que le test n'atteigne pas la dépendance réelle.
  4. Effectuez les tests rapidement. L'objectif est que l'ensemble des tests unitaires s'exécute en quelques secondes. Les tests lents sont ignorés, et les tests ignorés masquent les régressions.
  5. Suivez la structure « Préparer, Agir, Affirmer ». Trois petits blocs séparés par des lignes vides signalent l'intention et permettent de repérer facilement les lignes défectueuses.
  6. Exécutez des tests à chaque commit. Intégrez les tests dotnet dans un pipeline CI afin qu'un test défaillant bloque la fusion au lieu de la déployer.ping à la fabrication.
  7. TracAugmentez la couverture de code k, mais ne la poursuivez pas à tout prix. La couverture met en évidence les itinéraires non testés, mais un nombre élevé à lui seul ne garantit pas la qualité. RevVoyez à quoi servent réellement les lignes manquantes.

Appliquées conjointement, ces pratiques transforment le projet DemoTest construit ci-dessus en une base pour une suite qui détecte les régressions à chaque mise à jour, documente le comportement pour les futurs développeurs et donne confiance lors de la refactorisation d'une application ASP.NET.

FAQ

Oui. GitHub Copilot peut générer des blocs [TestClass] et [TestMethod], suggérer des mises en page Arrange Act Assert et générer des cas [DataRow] paramétrés à partir d'une signature de méthode cible. RevExaminez les assertions générées avant de leur faire confiance en production.

Oui. Les assistants basés sur l'apprentissage automatique peuvent identifier les tests fragiles, proposer de meilleurs noms et mettre en évidence les configurations dupliquées qui devraient figurer dans [TestInitialize]. Ils raccourcissent le temps de relecture, mais le développeur reste responsable de la validité de chaque assertion.

Un test unitaire isole une classe ou une méthode et simule ses dépendances. Un test d'intégration teste plusieurs composants simultanément, souvent en sollicitant une base de données ou un serveur web réel. Les tests unitaires s'exécutent en quelques millisecondes ; les tests d'intégration sont plus longs, mais permettent de détecter les erreurs de configuration.

Dans Visual Studio Enterprise, utilisez Test Analyze Code Couverture pour tous les tests. Pour les autres éditions, ajoutez le Coverlet NuGet package et exécutez dotnet test --collect:"XPlat Code Couverture » pour produire une Cobertura Rapport XML.

Encapsulez la dépendance dans une interface et injectez-la via le constructeur. Lors du test, transmettez un stub ou une simulation créée avec des bibliothèques telles que Moq ou NSubstitute afin que l'unité testée n'accède jamais à la base de données réelle ni au point de terminaison HTTP.

Exécutez la commande `dotnet test` dans le dossier contenant le projet de test. Cette commande compile le projet, détecte chaque méthode de test (`[TestMethod]`), les exécute et affiche un récapitulatif. Les systèmes d'intégration continue (CI) tels que GitHub Actions utilisent cette même commande dans une étape de workflow.

Marquez la méthode avec [DataTestMethod] et ajoutez un ou plusieurs attributs [DataRow] qui fournissent les valeurs d'entrée et le résultat attendu. MSTest exécute ensuite le même corps de test une fois par ligne, générant une ligne distincte dans l'explorateur de tests pour chaque cas.

Créez une méthode de test défaillante décrivant le comportement attendu, ajoutez juste assez de code pour la faire réussir, puis refactorisez. Ce cycle de refactorisation (rouge-vert) permet de maintenir la conception guidée par les tests, et non l'inverse.

Résumez cet article avec :