Écrire des tests unitaires pour C/C++ dans Visual Studio

Vous pouvez écrire et exécuter vos tests unitaires C++ à l’aide de la fenêtre Explorateur de tests. Il fonctionne comme pour les autres langages. Pour plus d’informations sur l’utilisation de l’Explorateur de tests, consultez Exécuter des tests unitaires avec l’Explorateur de tests.

Notes

Certaines fonctionnalités, comme Live Unit Testing, les tests codés de l’interface utilisateur et IntelliTest, ne sont pas prises en charge pour C++.

Visual Studio inclut ces infrastructures de test C++, aucun téléchargement supplémentaire n’étant nécessaire :

  • Framework de tests unitaires Microsoft pour C++
  • Google Test
  • Boost.Test
  • CTest

Vous pouvez utiliser les infrastructures installées ou écrire votre propre adaptateur de test pour l’infrastructure que vous souhaitez utiliser dans Visual Studio. Un adaptateur de test intègre des tests unitaires à la fenêtre de l’Explorateur de tests. Plusieurs adaptateurs de tiers sont disponibles sur Visual Studio Marketplace. Pour plus d’informations, consultez Installer des frameworks de tests unitaires de tiers.

Visual Studio 2017 et ultérieur (Professional et Enterprise)

Prise en charge de projets de test unitaire C++ CodeLens.

Visual Studio 2017 et ultérieur (toutes les éditions)

  • L’Adaptateur Google Test est inclus comme composant par défaut de la charge de travail Développement Desktop en C++. Il dispose d’un modèle de projet que vous pouvez ajouter à une solution. Faites un clic droit sur le nœud de solution dans l’Explorateur de solutions et choisissez Ajouter>un nouveau projet dans le menu contextuel pour ajouter le modèle de projet. Il dispose également d’options que vous pouvez configurer via Outils>Options. Pour plus d’informations, consultez Guide pratique pour utiliser Google Test dans Visual Studio.

  • Boost.Test est inclus comme composant par défaut de la charge de travail Développement Desktop en C++. Il est intégré à l’Explorateur de tests, mais n’a actuellement pas de modèle de projet. Il doit être configuré manuellement. Pour plus d’informations, consultez Guide pratique pour utiliser Boost.Test dans Visual Studio.

  • La prise en charge de CTest est incluse dans le composant Outils CMake pour C++ qui fait partie de la charge de travail Développement Desktop en C++. Pour plus d’informations, consultez Guide pratique pour utiliser CTest dans Visual Studio.

Versions antérieures de Visual Studio

Vous pouvez télécharger l’adaptateur Google Test et les extensions Boost.Test Adapter sur Visual Studio Marketplace. Recherchez-les sur l’adaptateur de test pour Boost.Test et l’adaptateur de test pour Google Test.

Workflow de base des tests

Les sections suivantes décrivent les étapes de base pour vous familiariser avec les tests unitaires C++. La configuration de base est similaire pour les infrastructures Microsoft et Google Test. Boost.Test nécessite la création manuelle d’un projet de test.

Créez un projet de test dans Visual Studio 2022

Définissez et exécutez des tests unitaires dans un ou plusieurs projets de test. Un projet de test crée une application distincte qui appelle le code dans votre exécutable et rend compte de son comportement. Créez des projets de test dans la même solution que le code que vous souhaitez tester.

Pour ajouter un nouveau projet de test à une solution existante,

  1. Faites un clic droit sur le nœud Solution dans l’Explorateur de solutions.
  2. Dans le menu contextuel, choisissez Ajouter>un nouveau projet.
  3. Définissez Langage sur C++ et tapez « test » dans la zone de recherche. L’illustration suivante montre les projets de test qui sont disponibles quand les charges de travail Développement Desktop en C++ et Développement UWP sont installées :

C++ Test Projects in Visual Studio 2022

Créer un projet de test dans Visual Studio 2019

Définissez et exécutez des tests dans un ou plusieurs projets de test. Créez les projets dans la même solution que le code que vous souhaitez tester. Pour ajouter un nouveau projet de test à une solution existante,

  1. Faites un clic droit sur le nœud Solution dans l’Explorateur de solutions.
  2. Dans le menu contextuel, choisissez Ajouter>un nouveau projet.
  3. Définissez Langage sur C++ et tapez « test » dans la zone de recherche. L’illustration suivante montre les projets de test qui sont disponibles quand les charges de travail Développement Desktop en C++ et Développement UWP sont installées :

C++ Test Projects in Visual Studio 2019

Créer des références à d’autres projets de la solution

Pour permettre l’accès aux fonctions dans le projet en cours de test, ajoutez une référence à ce projet dans votre projet de test. Faites un clic droit sur le nœud de projet de test dans l’Explorateur de solutions pour obtenir un menu contextuel. Choisissez Ajouter >une référence. Dans la boîte de dialogue Ajouter une référence, choisissez le ou les projets que vous souhaitez tester.

Add reference

Si le code de test n’exporte pas les fonctions que vous voulez tester, ajoutez les fichiers de sortie .obj ou .lib aux dépendances du projet de test. Pour plus d’informations, consultez Pour lier les tests aux fichiers objet ou bibliothèque. N’incluez pas de fichiers objet qui ont une fonction main ou un autre point d’entrée standard tel que wmain, WinMain ou DllMain. Lorsque vous ajoutez de nouveaux fichiers sources à votre projet, mettez à jour les dépendances du projet de test pour inclure les fichiers objet correspondants.

Ajouter des directives #include pour les fichiers d’en-tête

Ensuite, dans votre fichier de test unitaire .cpp, ajoutez une directive #include pour les fichiers d’en-tête qui déclarent les types et les fonctions que vous voulez tester. Tapez #include ", puis IntelliSense s’active pour vous aider à choisir. Répétez l’opération pour les autres en-têtes.

Screenshot of the Solution Explorer showing an #include directive being added with IntelliSense highlighting a header file for inclusion.

Pour éviter d’avoir à taper le chemin d’accès complet de chaque instruction Include dans le fichier source, ajoutez les dossiers requis dans Projet>Propriétés>C/C++>Général>Répertoires Include supplémentaires.

Écrire des méthodes de test

Notes

Cette section décrit la syntaxe du framework de tests unitaires Microsoft pour C/C++. Elle est documentée ici : Informations de référence sur l’API Microsoft.VisualStudio.TestTools.CppUnitTestFramework. Pour consulter la documentation de Google Test, consultez Google Test Primer. Pour Boost.Test, consultez Boost Test Library: The Unit Test Framework.

Le fichier .cpp dans votre projet de test a une classe stub et une méthode définies pour vous. Elles montrent un exemple d’écriture de code de test. Les signatures utilisent les macros TEST_CLASS et TEST_METHOD, qui rendent les méthodes découvrables à partir de la fenêtre Explorateur de tests.

Screenshot of the Test Explorer window that shows the unittest1.cpp code file containing a stub class and method using the TEST_CLASS and TEST_METHOD macros.

TEST_CLASS et TEST_METHOD font partie du framework de test natif Microsoft. L’Explorateur de tests découvre de la même façon les méthodes de test dans les autres frameworks pris en charge.

TEST_METHOD retourne void. Pour produire un résultat de test, utilisez les méthodes statiques de la classe Assert pour tester les résultats réels par rapport aux résultats attendus. Dans l’exemple suivant, supposons que MyClass a un constructeur qui accepte une std::string. Cet exemple montre comment tester que le constructeur initialise la classe comme prévu :

TEST_METHOD(TestClassInit)
{
    std::string name = "Bill";
    MyClass mc(name);
    Assert::AreEqual(name, mc.GetName());
}

Dans l’exemple précédent, le résultat de l’appel Assert::AreEqual détermine si le test réussit ou échoue. La classe Assert contient de nombreuses autres méthodes pour comparer les résultats attendus avec les résultats réels.

Vous pouvez ajouter des caractéristiques aux méthodes de test pour spécifier les propriétaires des tests, la priorité et d’autres informations. Vous pouvez ensuite utiliser ces valeurs pour trier et regrouper des tests dans l’Explorateur de tests. Pour plus d’informations, consultez Exécuter des tests unitaires avec l’Explorateur de tests.

Exécuter les tests

  1. Dans le menu Test, choisissez Fenêtres>Explorateur de tests. L’illustration suivante montre un projet de test dont les tests n’ont pas encore été exécutés.

    Test Explorer before running tests

    Note

    L’intégration de CTest à l’Explorateur de tests n’est pas encore disponible. Exécutez des tests CTest à partir du menu principal de CMake.

  2. Si l'un de vos tests ne figure pas dans la fenêtre, générez le projet de test en faisant un clic droit sur son nœud dans l’Explorateur de solutions et en choisissant Générer ou Régénérer.

  3. Dans l’Explorateur de tests, choisissez Exécuter tout ou sélectionnez les tests spécifiques à exécuter. Cliquez avec le bouton droit sur un test pour accéder à d’autres options, notamment son exécution en mode débogage avec des points d’arrêt activés. Une fois tous les tests exécutés, la fenêtre affiche les tests qui ont réussi et ceux qui ont échoué.

    Test Explorer after tests are run

Pour les tests ayant échoué, le message affiche des détails qui aident à diagnostiquer la cause. Faites un clic droit sur le test défaillant pour obtenir un menu contextuel. Choisissez Déboguer pour parcourir la fonction où l’échec s’est produit.

Pour plus d’informations sur l’utilisation de l’Explorateur de tests, consultez Exécuter des tests unitaires avec l’Explorateur de tests.

Pour plus d’informations sur les tests unitaires, consultez les principes de base des tests unitaires.

Utiliser CodeLens

Visual Studio 2017 et ultérieur (éditions Professional et Enterprise)

CodeLens vous permet d’afficher rapidement l’état d’un test unitaire sans quitter l’éditeur de code.

Initialisez CodeLens pour un projet de test unitaire C++ de l’une des manières suivantes :

  • Modifiez et générez votre projet de test ou solution.
  • Régénérez votre projet ou solution.
  • Exécutez des tests à partir de la fenêtre Explorateur de tests.

Après son initialisation, vous pouvez voir les icônes d’état des tests au-dessus de chaque test unitaire.

C++ CodeLens Icons

Choisissez l’icône pour plus d’informations, ou pour exécuter ou déboguer le test unitaire :

C++ CodeLens Run and Debug