web-dev-qa-db-fra.com

Comment configurer Google C ++ Testing Framework (gtest) avec Visual Studio 2005

Il n'est pas documenté sur le site Web et les gens semblent avoir des problèmes pour configurer le cadre. Quelqu'un peut-il s'il vous plaît montrer une introduction étape par étape pour un exemple de configuration de projet?

81
knaser

Ce qu'Arlaharen a dit était fondamentalement vrai, sauf qu'il a omis la partie qui explique vos erreurs de l'éditeur de liens. Tout d'abord, vous devez construire votre application sans le CRT en tant que bibliothèque d'exécution. Vous devriez toujours le faire de toute façon, car cela simplifie vraiment la distribution de votre application. Si vous ne le faites pas, tous vos utilisateurs ont besoin que la bibliothèque d'exécution Visual C++ soit installée, et ceux qui ne s'en plaindront pas de mystérieuses DLL manquantes sur leur système ... pour les quelques centaines de kilo-octets supplémentaires qu'il en coûte pour se connecter le CRT statiquement, vous vous épargnez beaucoup de maux de tête plus tard en support (croyez-moi sur celui-ci - je l'ai appris à la dure!).

Quoi qu'il en soit, pour ce faire, vous allez dans les propriétés de la cible -> C/C++ -> Génération de code -> Bibliothèque d'exécution, et il doit être défini comme "Multi-Threaded" pour votre version Release et "Multi-Threaded Debug" pour votre version de débogage.

Étant donné que la bibliothèque gtest est construite de la même manière, vous devez vous assurer que vous liez avec la bonne version de it , sinon l'éditeur de liens tirera dans une autre copie de la bibliothèque d'exécution, qui est l'erreur que vous avez vue (au fait, cela ne devrait pas faire de différence si vous utilisez MFC ou non). Vous devez construire gtest en mode à la fois un débogage et une version et conserver les deux copies. Vous établissez ensuite un lien avec gtest.lib/gtest_main.lib dans votre version Release et gtestd.lib/gtest_maind.lib dans votre version Debug.

En outre, vous devez vous assurer que votre application pointe vers le répertoire dans lequel les fichiers d'en-tête gtest sont stockés (dans les propriétés -> C/C++ -> Général -> Inclure les répertoires supplémentaires), mais si vous arrivez à l'erreur du lieur, je suppose que vous avez déjà réussi à obtenir cette partie correcte, sinon vous auriez beaucoup plus d'erreurs de compilation à traiter en premier.

43
Nik Reiman

(Ces instructions permettent au framework de test de fonctionner pour la configuration de débogage. Il devrait être assez simple d'appliquer le même processus à la configuration de publication.)

Obtenez le framework de test Google C++

  1. Téléchargez la dernière version framework gtest
  2. Décompressez vers C:\gtest

Construisez les bibliothèques du framework

  1. Ouvrez C:\gtest\msvc\gtest.sln Dans Visual Studio
  2. Définissez la configuration sur "Debug"
  3. Créer une solution

Créez et configurez votre projet de test

  1. Créez une nouvelle solution et choisissez le modèle Visual C++> Win32> Application console Win32
  2. Cliquez avec le bouton droit sur le projet nouvellement créé et choisissez Propriétés
  3. Changez la configuration en débogage.
  4. Propriétés de configuration> C/C++> Général> Inclure des répertoires supplémentaires: ajoutez C:\gtest\include
  5. Propriétés de configuration> C/C++> Génération de code> Bibliothèque d'exécution: si votre code est lié à une DLL d'exécution, choisissez Débogage multithread DLL (/ MDd). Sinon, choisissez Debug multithread (/ MTd).
  6. Propriétés de configuration> Éditeur de liens> Général> Répertoires de bibliothèque supplémentaires: ajoutez C:\gtest\msvc\gtest\Debug Ou C:\gtest\msvc\gtest-md\Debug, Selon l'emplacement de gtestd.lib
  7. Propriétés de configuration> Éditeur de liens> Entrée> Dépendances supplémentaires: ajoutez gtestd.lib

Tout vérifier fonctionne

  1. Ouvrez le cpp dans votre projet de test contenant la fonction main().
  2. Collez le code suivant:

    #include "stdafx.h"  
    #include <iostream>
    
    #include "gtest/gtest.h"
    
    TEST(sample_test_case, sample_test)
    {
        EXPECT_EQ(1, 1);
    }
    
    int main(int argc, char** argv) 
    { 
        testing::InitGoogleTest(&argc, argv); 
        RUN_ALL_TESTS(); 
        std::getchar(); // keep console window open until Return keystroke
    }
    
  3. Déboguer> Démarrer le débogage

Si tout a fonctionné, vous devriez voir la fenêtre de la console apparaître et vous montrer les résultats des tests unitaires.

102
mtlynch

J'ai fait un tutoriel vidéo sur la configuration: http://www.youtube.com/watch?v=mzSzwQOmMRs

6
Armando

Si vous ne voulez pas écrire votre propre main () pour les tests, vous pouvez utiliser la fonction main () définie dans gtest_main.lib mais vous obtenez des erreurs de l'éditeur de liens "Le point d'entrée doit être défini" dans VS2012. Dans votre projet de test, définissez ProjectProperties-> Linker-> System-> SubSystem sur "Console" car cela forcera VS2012 à rechercher un point d'entrée appelé "main ()" et le trouvera dans gtest_main.lib (à condition que vous ayez lié correctement).

5
philipper

Après avoir construit gtest, voici ce que j'ai fait:

  1. Ajoutez\mypath\gtest-1.0.1\Debug (ou Release) à Common Properties-> Linker-> General-> Additional Library Directories
  2. Ajoutez gtest.lib et gtest_main.lib aux propriétés communes-> Éditeur de liens-> Entrée-> Dépendances supplémentaires

Après cela, j'écris simplement mes tests en utilisant TEST ou TEST_F selon le cas et je les compile avec ma fonction principale:

int main(int argc, char** argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
4
Arlaharen

Dans Microsoft Visual Studio, un type de bibliothèque d'exécution mal configuré provoque des erreurs de lien.

VS 2005 (et 2008) utilise Multithreaded DLL ou Multithreaded Debug DLL par défaut). Mais la bibliothèque de test Google utilise Mulithreaded ou Mulithreaded debug runtime runtime debug par défaut.

Donc, choisissez le type de bibliothèque d'exécution approprié pour la bibliothèque de test Google. (dans Propriétés de configuration -> Génération de code -> Bibliothèque d'exécution).

2
rein

De nombreuses erreurs ont pris du temps à corriger.

Voici quelques étapes simples:

# Téléchargez le fichier Zip Googletest à partir de: https://github.com/google/googletest

# Googletest Visual Studio Solution

Open    C:\googletest\googletest\msvc\2010\gtest.sln
    Change "Solution configuration"
        from "Debug" to "Release"
    Build Solution
        creates gtest.lib

# Votre projet:

Project Properties > Configuration Properties > VC++ Directories > Include Directories
    append the following:       ;C:\googletest\googletest\include

Project Properties > Configuration Properties > Linker > General > Additional Library Directories > 
    append the following:           ;C:\googletest\googletest\msvc\2010\gtest\Win32-Release

Project Properties > Configuration Properties > C/C++ > Runtime Library
    Remove the value of the above. (or match it to Googletest project)
0