Utiliser le framework de tests unitaires Microsoft pour C++ dans Visual Studio

Le framework de tests unitaires Microsoft pour C++ est par défaut dans la charge de travail Développement Desktop en C++.

Pour écrire des tests unitaires dans un projet distinct

En règle générale, vous exécutez votre code de test dans son propre projet, dans la même solution que le code que vous voulez tester. Pour installer et configurer un nouveau projet de test, consultez Écriture de tests unitaires pour C/C++.

Pour écrire des tests unitaires dans le même projet

Dans certains cas, par exemple lors du test de fonctions non exportées dans une DLL, il peut être nécessaire de créer les tests dans le même projet que le programme que vous testez. Pour écrire des tests unitaires dans le même projet :

  1. Modifiez les propriétés du projet de façon à inclure les fichiers d’en-tête et les fichiers bibliothèques nécessaires aux tests unitaires.

    1. Dans l’Explorateur de solutions, dans le menu contextuel du projet que vous testez, choisissez Propriétés. La fenêtre des propriétés du projet s'ouvre.

    2. Dans la boîte de dialogue Pages de propriétés, sélectionnez Propriétés de configuration>Répertoires VC++.

    3. Sélectionnez la flèche vers le bas dans les lignes suivantes, puis choisissez <Modifier>. Ajoutez ces chemins :

      Répertoire Propriété
      Répertoires Include $(VCInstallDir)Auxiliary\VS\UnitTest\include
      Répertoires de bibliothèques $(VCInstallDir)Auxiliary\VS\UnitTest\lib
  2. Ajoutez un fichier de test unitaire C++ :

    1. Cliquez avec le bouton droit sur le nœud de projet dans l’Explorateur de solutions, puis choisissez Ajouter>Nouvel élément.

    2. Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Fichier C++ (.cpp), donnez-lui un nom approprié, puis choisissez Ajouter.

Pour lier les tests aux fichiers objets ou bibliothèques

Si le code testé n’exporte pas les fonctions à tester, vous pouvez ajouter le fichier de sortie .obj ou .lib aux dépendances du projet de test. Modifiez les propriétés du projet de test pour inclure les en-têtes ainsi que les fichiers de bibliothèque ou fichiers objets nécessaires aux tests unitaires.

  1. Dans l’Explorateur de solutions, dans le menu contextuel du projet de test, choisissez Propriétés. La fenêtre des propriétés du projet s'ouvre.

  2. Sélectionnez la page Propriétés de configuration>Éditeur de liens>Entrée, puis sélectionnez Dépendances supplémentaires.

    Choisissez Modifier, puis ajoutez les noms des fichiers .obj ou .lib. N’utilisez pas les noms de chemins complets.

  3. Sélectionnez la page Propriétés de configuration>Éditeur de liens>Général, puis sélectionnez Répertoires de bibliothèques supplémentaires.

    Choisissez Modifier, puis ajoutez le chemin d’accès au répertoire des fichiers .obj ou .lib. Le chemin d’accès se trouve généralement dans le dossier de build du projet testé.

  4. Sélectionnez la page Propriétés de configuration>répertoires VC++, puis sélectionnez Répertoires Include.

    Choisissez Modifier, puis ajoutez le répertoire d’en-tête du projet testé.

Écrire les tests

Tout fichier .cpp contenant des classes de test doit inclure « CppUnitTest.h » et avoir une instruction using pour using namespace Microsoft::VisualStudio::CppUnitTestFramework. Le projet de test est déjà configuré pour vous. Il contient également une définition d’espace de noms et une TEST_CLASS avec une TEST_METHOD pour vous aider à démarrer. Vous pouvez modifier le nom de l’espace de noms ainsi que les noms entre parenthèses dans les macros de classe et de méthode.

Le framework de tests définit des macros spéciales pour l’initialisation des modules, des classes et des méthodes de test ainsi que pour le nettoyage des ressources une fois les tests effectués. Ces macros génèrent du code à exécuter avant le premier accès à une classe ou une méthode, et après l’exécution du dernier test. Pour plus d’informations, consultez Initialiser et nettoyer.

Utilisez les méthodes statiques de la classe Assert pour définir des conditions de test. Utilisez la classe Logger pour écrire des messages dans la fenêtre Sortie. Ajouter des attributs aux méthodes de test

Exécuter les tests

  1. Dans le menu Test, choisissez Fenêtres>Explorateur de tests.

  2. Si tous vos tests ne sont pas visibles dans la fenêtre, générez le projet de test en cliquant avec le bouton droit sur son nœud dans l’Explorateur de solutions, et en choisissant Créer ou Regé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.

  4. Dans la Fenêtre Sortie, dans la liste déroulante, choisissez Tests pour voir les messages écrits par la classe Logger :

    C++ Output Window showing test messages

Définir des caractéristiques pour permettre le regroupement

Vous pouvez définir des caractéristiques pour des méthodes de test, ce qui vous permet de catégoriser et de regrouper les tests dans l’Explorateur de tests. Pour définir une caractéristique, utilisez la macro TEST_METHOD_ATTRIBUTE . Par exemple, pour définir une caractéristique nommée TEST_MY_TRAIT:

#define TEST_MY_TRAIT(traitValue) TEST_METHOD_ATTRIBUTE(L"MyTrait", traitValue)

Pour utiliser la caractéristique définie dans vos tests unitaires :

BEGIN_TEST_METHOD_ATTRIBUTE(Method1)
    TEST_OWNER(L"OwnerName")
    TEST_PRIORITY(1)
    TEST_MY_TRAIT(L"thisTraitValue")
END_TEST_METHOD_ATTRIBUTE()

TEST_METHOD(Method1)
{
    Logger::WriteMessage("In Method1");
    Assert::AreEqual(0, 0);
}

Macros d'attribut de fonctionnalités C++

Les caractéristiques prédéfinies suivantes se trouvent dans CppUnitTest.h. Pour plus d’informations, consultez Informations de référence sur l’API du framework de tests unitaires Microsoft pour C++.

Macro Description
TEST_METHOD_ATTRIBUTE(attributeName, attributeValue) Utilisez la macro TEST_METHOD_ATTRIBUTE pour définir une caractéristique.
TEST_OWNER(ownerAlias) Utilisez la caractéristique Owner prédéfinie pour spécifier un propriétaire de la méthode de test.
TEST_PRIORITY(priority) Utilisez la caractéristique Priority prédéfinie pour assigner des priorités relatives à vos méthodes de test.