Antworten:
Was Arlaharen sagte, war im Grunde richtig, außer dass er den Teil weggelassen hat, der Ihre Linkerfehler erklärt. Zunächst müssen Sie Ihre Anwendung ohne CRT als Laufzeitbibliothek erstellen . Sie sollten dies sowieso immer tun, da dies die Verteilung Ihrer Anwendung wirklich vereinfacht. Wenn Sie dies nicht tun, muss auf allen Benutzern die Visual C ++ - Laufzeitbibliothek installiert sein, und diejenigen, die sich nicht über mysteriöse DLLs beschweren, die auf ihrem System fehlen ... für die zusätzlichen paar hundert Kilobyte, die das Verknüpfen kostet Mit der CRT sparen Sie sich statisch viel Kopfschmerzen später bei der Unterstützung (vertrauen Sie mir in diesem Fall - ich habe es auf die harte Tour gelernt!).
Um dies zu tun, gehen Sie zu den Eigenschaften des Ziels -> C / C ++ -> Codegenerierung -> Laufzeitbibliothek, und es muss für Ihren Release-Build als "Multi-Threaded" und für "Multi-Threaded-Debug" für festgelegt werden Ihr Debug-Build.
Da die Gtest Bibliothek in der gleichen Art und Weise aufgebaut ist, müssen Sie sicherstellen, dass Sie eine Verknüpfung gegen die richtige Version es , oder aber der Linker in einer anderen Kopie der Laufzeitbibliothek ziehen, die der Fehler Sie btw sah (dieses sollte keinen Unterschied machen, ob Sie MFC verwenden oder nicht). Sie müssen gtest sowohl als Debug- als auch als Release- Modus erstellen und beide Kopien behalten. Anschließend verknüpfen Sie gtest.lib / gtest_main.lib in Ihrem Release-Build und gtestd.lib / gtest_maind.lib in Ihrem Debug-Build.
Außerdem müssen Sie sicherstellen, dass Ihre Anwendung auf das Verzeichnis verweist, in dem die gtest-Headerdateien gespeichert sind (in den Eigenschaften -> C / C ++ -> Allgemein -> Zusätzliche Include-Verzeichnisse). Wenn Sie jedoch auf den Linker-Fehler stoßen, gehe ich davon aus dass Sie es bereits geschafft haben, diesen Teil korrekt zu machen, sonst hätten Sie viel mehr Compilerfehler, die Sie zuerst behandeln müssten.
(Mit diesen Anweisungen funktioniert das Testframework für die Debug-Konfiguration. Es sollte ziemlich trivial sein, denselben Prozess auf die Release-Konfiguration anzuwenden.)
Holen Sie sich das Google C ++ Testing Framework
C:\gtest
Erstellen Sie die Framework-Bibliotheken
C:\gtest\msvc\gtest.sln
in Visual StudioErstellen und konfigurieren Sie Ihr Testprojekt
C:\gtest\include
C:\gtest\msvc\gtest\Debug
oder C:\gtest\msvc\gtest-md\Debug
, abhängig vom Speicherort von gtestd.lib, hinzugtestd.lib
Überprüfen, ob alles funktioniert
main()
Funktion enthält.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
}
Debuggen> Debuggen starten
Wenn alles funktioniert hat, sollte das Konsolenfenster angezeigt werden und Ihnen die Unit-Testergebnisse anzeigen.
Ich habe ein Video-Tutorial zum Setup erstellt: http://www.youtube.com/watch?v=mzSzwQOmMRs
Nachdem ich gtest erstellt habe, habe ich Folgendes getan:
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();
}
gtest_main.lib
enthält die Standardfunktion main
, daher möchten Sie sie wahrscheinlich nicht einschließen, wenn Sie Ihre eigene main
explizit geschrieben haben.
Wenn Sie kein eigenes main () für Tests schreiben möchten, können Sie die in gtest_main.lib definierte main () -Funktion verwenden, aber dann erhalten Sie Linkerfehler "Einstiegspunkt muss definiert sein" in VS2012. Setzen Sie in Ihrem Testprojekt ProjectProperties-> Linker-> System-> SubSystem auf "Console", da dies VS2012 zwingt, nach einem Einstiegspunkt namens "main ()" zu suchen und diesen in gtest_main.lib zu finden (vorausgesetzt, Sie haben einen Link erstellt) es in richtig).
In Microsoft Visual Studio verursacht ein falsch konfigurierter Laufzeitbibliothekstyp Verknüpfungsfehler.
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 geeigneten Laufzeitbibliothekstyp für die Google-Testbibliothek. (unter Konfigurationseigenschaften -> Codegenerierung -> Laufzeitbibliothek).
Die Behebung vieler Fehler dauerte eine Weile.
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)