Anatomie d'un test unitaire

Lorsque vous créez un test unitaire, plusieurs fichiers sont ajoutés à votre solution. Dans cette rubrique, nous allons utiliser un exemple de test unitaire pour découvrir les fichiers les plus courants. L'exemple provient de la rubrique Procédure pas à pas : création et exécution de tests unitaires.

Parties d'un fichier de test unitaire

Lorsque vous créez un test unitaire, un fichier de test unitaire à part est créé pour chaque classe que vous testez. Chaque fichier de test unitaire contient une méthode de test pour chaque méthode que vous testez. Dans cet exemple, les deux méthodes que nous testons appartiennent à la même classe. Par conséquent, il y a un seul fichier de classe de test : BankAccountTest.cs.

Section supérieure du fichier

L'illustration suivante représente les premières lignes du code, notamment la référence aux espaces de noms, la classe TestClassAttribute et la classe TestContext. Consultez la procédure pas à pas si vous souhaitez voir des exemples de code.

Section supérieure d'un exemple de fichier de test unitaire

  1. Microsoft.VisualStudio.TestTools.UnitTesting : lorsque vous créez un test unitaire, une référence à l'espace de noms Microsoft.VisualStudio.TestTools.UnitTesting est ajoutée à votre projet de test, et l'espace de noms est inclus dans une instruction using en haut du fichier de test unitaire. L'espace de noms comporte de nombreuses classes pour vous aider à réaliser des tests unitaires, notamment :

    • Des classes d'assertion que vous pouvez utiliser pour vérifier les conditions dans les tests unitaires

    • Des attributs d'initialisation et de nettoyage pour exécuter le code avant ou après les séries de tests unitaires et garantir un état de début et de fin spécifique

    • L'attribut ExpectedException pour vérifier qu'un certain type d'exception est généré pendant l'exécution des tests unitaires

    • La classe TestContext qui stocke des informations transmises aux tests unitaires, telles que la connexion de données pour les tests pilotés par des données et des informations requises afin d'exécuter des tests unitaires pour les services Web ASP.NET

    Pour plus d'informations, consultez Microsoft.VisualStudio.TestTools.UnitTesting.

  2. TestClassAttribute : lorsque vous créez un test unitaire, la classe TestClassAttribute est incorporée au fichier de test pour indiquer qu'elle peut contenir des méthodes marquées avec l'attribut [TestMethod()]. Sans classe TestClassAttribute, les méthodes de test sont ignorées.

    Une classe de test peut hériter des méthodes d'une autre classe de test contenue dans le même assembly. Cela signifie que vous pouvez créer des méthodes de test dans une classe de test de base, puis utiliser ces méthodes dans des classes de test dérivées.

    Pour plus d'informations, consultez TestClassAttribute.

  3. TestContext : lorsque vous créez des tests unitaires, une variable appelée testContextInstance est incluse pour chaque classe de test. Les propriétés de la classe TestContext stockent des informations relatives au test actuel. Pour plus d'informations, consultez TestContext.

Section inférieure du fichier

L'illustration suivante représente la deuxième partie du code généré dans la procédure pas à pas, qui inclut la section « Attributs de tests supplémentaires », l'attribut TestMethod et la logique de la méthode, qui comporte une instruction Assert.

Section inférieure d'un exemple de fichier de test unitaire

  1. Attributs de test supplémentaires : développez cette section pour afficher les méthodes commentées que vous pouvez utiliser pour inclure l'initialisation et le nettoyage à l'aide des attributs suivants :

    1. [ClassInitialize()]   Utilisez ClassInitialize pour exécuter le code avant l'exécution du premier test de la classe.

    2. [ClassCleanUp()]   Utilisez ClassCleanup pour exécuter le code après l'exécution de tous les tests d'une classe.

    3. [TestInitialize()]   Utilisez TestInitialize pour exécuter le code avant l'exécution de chaque test.

    4. [TestCleanUp()]   Utilisez TestCleanup pour exécuter le code après l'exécution de chaque test.

      Créez des méthodes marquées avec l'attribut [ClassInitialize()] ou [TestInitialize()] pour préparer des aspects de l'environnement dans lequel votre test unitaire va s'exécuter. Le but de cette opération est d'établir un état connu pour l'exécution de votre test unitaire. Par exemple, vous pouvez utiliser la méthode [ClassInitialize ()] ou [TestInitialize ()] pour copier, modifier ou créer certains fichiers de données que votre test utilisera.

      Créez des méthodes marquées avec l'attribut [ClassCleanup ()] ou [TestCleanUp {}] pour faire retourner l'environnement à un état connu après l'exécution d'un test. Cela peut signifier la suppression de fichiers dans des dossiers ou le retour d'une base de données à un état connu. En guise d'exemple, on peut citer la réinitialisation d'une base de données d'inventaire à un état initial après avoir testé une méthode utilisée dans une application d'enregistrement de commandes.

      Notes

      Il est recommandé d'utiliser le code de nettoyage dans une méthode [TestCleanup ()] ou [ClassCleanup ()] et pas dans une méthode du finaliseur. Les exceptions levées à partir d'une méthode de finaliseur ne sont pas interceptées et peuvent provoquer des résultats inattendus.

  2. TestMethodAttribute : lorsque vous créez un test unitaire, chaque méthode de test est marquée avec l'attribut [TestMethod()]. Sans cet attribut, le test unitaire ne s'exécute pas. Pour plus d'informations sur l'attribut TestMethod, consultez TestMethodAttribute.

  3. **Logique de la méthode de test, y compris une instruction Assert :**chaque test unitaire généré possède des variables vides et une instruction Assert d'espace réservé. L'instruction Assert d'espace réservé par défaut est habituellement l'instruction Assert.Inconclusive. Pour rendre le test explicite, vous devez initialiser les variables et remplacer l'espace réservé par une instruction Assert appropriée.

    Dans cet exemple, nous avons laissé la méthode de test unitaire CreditTest telle qu'elle a été générée, y compris ses instructions TODO. Toutefois, nous avons initialisé les variables et remplacé l'instruction Assert dans la méthode de test DebitTest. Les instructions TODO vous rappellent que vous pouvez initialiser ces lignes de code.

    Notes

    Le contenu de vos méthodes de test peut varier selon le type de test unitaire et la nature de la méthode qui est testée.

Remarque à propos des conventions d'attribution de noms : les outils de test Visual Studio utilisent des conventions d'affectation des noms lorsque les tests unitaires sont générés. Par exemple, un fichier de test unitaire est nommé en concaténant le mot « Test » avec le nom du fichier qui contient le code que vous testez ; dans notre exemple, il s'agit de « BankAccountTest.cs ». Les noms des classes de test et des méthodes de test sont générés à l'aide des valeurs par défaut. Vous pouvez modifier ces valeurs dans la boîte de dialogue Paramètres de génération des tests, que vous ouvrez en cliquant sur Paramètres dans la boîte de dialogue Créer des tests unitaires.

Éléments ajoutés à la solution

Cette section décrit les fichiers, autres que le fichier de test unitaire, qui sont générés dans Procédure pas à pas : création et exécution de tests unitaires.

Notes

Les fichiers créés par défaut lorsque vous générez un test unitaire dépendent des paramètres du projet de test. Pour modifier ces paramètres, cliquez sur Outils, puis sur Options. Dans la boîte de dialogue Options, développez Outils de test, puis cliquez sur Projet de test.

L'illustration suivante représente l'Explorateur de solutions après qu'un test unitaire a été créé pour notre projet exemple.

Explorateur de solutions pour un exemple de projet de test unitaire

  1. Éléments de solution : les éléments de solution contiennent deux fichiers :

    • Local.testsettings : ces paramètres contrôlent la façon dont sont exécutés les tests locaux qui ne collectent pas de données de diagnostic.

    • Bank.vsmdi : ce fichier contient des informations relatives aux listes de tests présentes dans la solution et remplit la fenêtre de l'Explorateur de tests.

    • TraceAndTestImpact.testsettings : ces paramètres contrôlent la façon dont sont exécutés les tests locaux qui un jeu particulier de données de diagnostic.

  2. Projet de test : contient les fichiers restants requis pour les tests unitaires.

  3. Propriétés de projet de test : contient le fichier AssemblyInfo.cs, qui fournit des options de génération pour le projet.

  4. Références du projet de test : contient les références requises pour exécuter les tests unitaires. Lorsque vous générez un test unitaire depuis du code existant, les références requises sont intégrées. Toutefois, vous pouvez ajouter des références pour personnaliser vos tests.

  5. Fichier de test unitaire : fichier de test unitaire décrit dans la première section de cette rubrique. Pour chaque classe que vous testez, un fichier de test unitaire séparé est créé dans le projet de test. Dans cet exemple, les deux méthodes que nous testons appartiennent à la même classe. Par conséquent, il y a un seul fichier de classe de test : BankAccountTest.cs.

Voir aussi

Référence

Microsoft.VisualStudio.TestTools.UnitTesting

Concepts

Création et exécution des tests unitaires pour le code existant

Tests unitaires et C++

Tests unitaires pour les méthodes génériques

Tests unitaires pour les services Web ASP.NET

Tests unitaires pour les méthodes privée, interne et friend