J'essaie d'utiliser GoogleTest pour tester une fonction simple, mais lorsque j'exécute make
dans mon dossier de construction, le compilateur lance Undefined Reference
messages d'erreur sur moi. J'ai référencé le fichier d'en-tête gtest, donc je ne suis pas sûr de ce qui ne va pas. Des idées? Je suis nouveau sur tout le sujet des tests unix et unitaires, donc je pourrais très bien manquer quelque chose de simple. Merci d'avance!
Messages d'erreur:
CMakeFiles/Proj2.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x1e): undefined reference to `testing::InitGoogleTest(int*, char**)'
main.cpp:(.text+0x23): undefined reference to `testing::UnitTest::GetInstance()'
main.cpp:(.text+0x2b): undefined reference to `testing::UnitTest::Run()'
collect2: error: ld returned 1 exit status
main.cpp
#include "gtest/gtest.h"
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Test.cpp
#include "gtest/gtest.h"
#include "Testable.h"
TEST(GetTwoTest, Two) {
EXPECT_EQ(2, GetTwo());
}
Testable.cpp
#include "Testable.h"
int GetTwo() {
return 3;
}
Voici mon fichier CMakeLists.txt:
cmake_minimum_required(VERSION 2.6)
SET(CMAKE_CXX_FLAGS "-std=gnu++11") #Turn on C++11 Support
set(FILES_TO_TEST Testable.cpp)
set(UNIT_TESTS Test.cpp)
set(MAIN_FILE main.cpp)
add_subdirectory(gtest) #Build all the gtest stuff
include_directories(gtest/include)
include_directories(.)
add_library(codeToTest ${FILES_TO_TEST})
add_executable(Proj2 ${MAIN_FILE})
target_link_libraries(Proj2 codeToTest)
add_executable(unit-test ${UNIT_TESTS})
target_link_libraries(unit-test gtest gtest_main rt pthread codeToTest)
Votre configuration semble être presque correcte. Cependant, vous devez disposer de 2 fonctions main
distinctes; un pour l'exécutable réel Proj2
et un autre avec le gtest inclut et fonctions pour l'exécutable de test unit-test
.
Vous pouvez le faire en ayant 2 fichiers main.cpp différents, par exemple main.cpp et test_main.cpp. Celui que vous avez montré serait test_main.cpp et serait inclus dans le add_executable(unit-test ...
commande.
Votre nouveau main.cpp n'aurait aucune référence à gtest, ni à des fonctions ni à des fonctions.
Des erreurs de l'éditeur de liens, il est évident que vous n'avez pas lié la bibliothèque gtest à votre programme de test.
Voir Primer :
Pour écrire un programme de test à l'aide de Google Test, vous devez compiler Google Test dans une bibliothèque et lier votre test à celle-ci. ...
Consultez ce document pour plus de détails sur votre compilateur et votre système.