web-dev-qa-db-de.com

So richten Sie das Google C ++ Testing Framework (gtest) mit Visual Studio 2005 ein

Es ist nicht auf der Website dokumentiert und die Leute scheinen Probleme mit der Einrichtung des Frameworks zu haben. Kann jemand bitte eine schrittweise Einführung für eine Beispielprojekteinrichtung zeigen?

81
knaser

Was Arlaharen sagte, war im Grunde genommen richtig, außer dass er den Teil wegließ, der Ihre Linker-Fehler erklärt. Zunächst müssen Sie Ihre Anwendung ohne das CRT als Laufzeitbibliothek erstellen. Sie sollten dies auf jeden Fall tun, da dies die Verteilung Ihrer Anwendung erheblich vereinfacht. Wenn Sie dies nicht tun, müssen alle Ihre Benutzer die Visual C++ Runtime Library installiert haben und diejenigen, die sich nicht über das Fehlen mysteriöser DLLs auf ihrem System beschweren ... für die zusätzlichen paar hundert Kilobyte, die für die Verknüpfung anfallen Mit dem CRT sparen Sie sich statisch später viel Kopfzerbrechen (vertrauen Sie mir in diesem Fall - ich habe es auf die harte Tour gelernt!).

Dazu gehen Sie auf jeden Fall zu den Eigenschaften des Ziels -> C/C++ -> Codegenerierung -> Laufzeitbibliothek und müssen für Ihren Release-Build "Multi-Threaded" und für "Multi-Threaded-Debug" festlegen Ihr Debug-Build.

Da die gtest-Bibliothek auf die gleiche Weise aufgebaut ist, müssen Sie sicherstellen, dass Sie mit der richtigen Version verknüpfen , da der Linker sonst die Verknüpfung aufbaut In einer anderen Kopie der Laufzeitbibliothek ist dies der Fehler, den Sie gesehen haben (übrigens sollte dies keinen Unterschied machen, ob Sie MFC verwenden oder nicht). Sie müssen gtest als sowohl ein Debug- als auch ein Release-Modus erstellen und beide Kopien behalten. Anschließend verknüpfen Sie in Ihrem Release-Build mit gtest.lib/gtest_main.lib und in Ihrem Debug-Build mit gtestd.lib/gtest_maind.lib.

Außerdem müssen Sie sicherstellen, dass Ihre Anwendung auf das Verzeichnis verweist, in dem die gtest-Headerdateien gespeichert sind (in Eigenschaften -> C/C++ -> Allgemein -> Zusätzliche Include-Verzeichnisse). Wenn Sie jedoch zum Linker-Fehler kommen, gehe ich davon aus Sie haben es bereits geschafft, diesen Teil zu korrigieren, oder Sie hätten viel mehr Compilerfehler, die Sie zuerst beheben müssen.

43
Nik Reiman

(Mit diesen Anweisungen funktioniert das Testframework für die Debug-Konfiguration. Es sollte ziemlich trivial sein, denselben Prozess auf die Release-Konfiguration anzuwenden.)

Google C++ Testing Framework herunterladen

  1. Laden Sie das neueste gtest framework herunter
  2. Entpacken zu C:\gtest

Erstellen Sie die Framework-Bibliotheken

  1. Öffnen Sie C:\gtest\msvc\gtest.sln In Visual Studio
  2. Konfiguration auf "Debug" setzen
  3. Lösung erstellen

Erstellen und Konfigurieren Sie Ihr Testprojekt

  1. Erstellen Sie eine neue Lösung und wählen Sie die Vorlage Visual C++> Win32> Win32 Console Application
  2. Klicken Sie mit der rechten Maustaste auf das neu erstellte Projekt und wählen Sie Eigenschaften
  3. Ändern Sie die Konfiguration in Debug.
  4. Konfigurationseigenschaften> C/C++> Allgemein> Zusätzliche Include-Verzeichnisse: C:\gtest\include Hinzufügen
  5. Konfigurationseigenschaften> C/C++> Codegenerierung> Laufzeitbibliothek: Wenn Ihr Code mit einer Laufzeit-DLL verknüpft ist, wählen Sie Multithreaded-Debug DLL (/ MDd). Wenn nicht, wählen Sie Multithreaded-Debug (/ MTd).
  6. Konfigurationseigenschaften> Linker> Allgemein> Zusätzliche Bibliotheksverzeichnisse: Fügen Sie C:\gtest\msvc\gtest\Debug Oder C:\gtest\msvc\gtest-md\Debug Hinzu, je nach Speicherort von gtestd.lib
  7. Konfigurationseigenschaften> Linker> Eingabe> Zusätzliche Abhängigkeiten: gtestd.lib Hinzufügen

Überprüfen, ob alles funktioniert

  1. Öffnen Sie das CPP in Ihrem Testprojekt, das die Funktion main() enthält.
  2. Fügen Sie den folgenden Code ein:

    #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. Debuggen> Debuggen starten

Wenn alles funktioniert hat, sollte das Konsolenfenster angezeigt werden und die Unit-Testergebnisse angezeigt werden.

102
mtlynch

Ich habe ein Video-Tutorial zum Setup erstellt: http://www.youtube.com/watch?v=mzSzwQOmMRs

6
Armando

Wenn Sie kein eigenes main () für Tests schreiben möchten, können Sie die in gtest_main.lib definierte main () - Funktion verwenden. In VS2012 wird jedoch der Fehler "Einstiegspunkt muss definiert sein" angezeigt. Setzen Sie in Ihrem Testprojekt ProjectProperties-> Linker-> System-> SubSystem auf "Console", da VS2012 auf diese Weise nach einem Einstiegspunkt namens "main ()" suchen und diesen in gtest_main.lib finden muss (vorausgesetzt, Sie haben eine Verknüpfung hergestellt) es richtig ein).

5
philipper

Nachdem ich gtest erstellt habe, habe ich Folgendes getan:

  1. Fügen Sie\mypath\gtest-1.0.1\Debug (oder Release) zu Common Properties-> Linker-> General-> Additional Library Directories hinzu
  2. Fügen Sie gtest.lib und gtest_main.lib unter Allgemeine Eigenschaften-> Linker-> Eingabe-> Zusätzliche Abhängigkeiten hinzu

Danach schreibe ich meine Tests einfach mit TEST oder TEST_F und kompiliere sie zusammen mit meiner Hauptfunktion:

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

In Microsoft Visual Studio führt ein falsch konfigurierter Laufzeitbibliothekstyp zu Verbindungsfehlern.

VS 2005 (und 2008) verwendet standardmäßig Multithreaded DLL oder Multithreaded Debug DLL. Die Google Test-Bibliothek verwendet jedoch standardmäßig die Debug-Laufzeit von Mulithreaded oder Mulithreaded.

Wählen Sie daher den entsprechenden Laufzeitbibliothekstyp für die Google-Testbibliothek aus. (in Konfigurationseigenschaften -> Codegenerierung -> Laufzeitbibliothek).

2
rein

Es dauerte eine Weile, bis viele Fehler behoben waren.

Hier sind einfache Schritte:

# Laden Sie die Googletest Zip-Datei von folgender Adresse herunter: https://github.com/google/googletest

# Googletest Visual Studio-Lösung

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

# Dein Projekt:

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)