2012-09-30 19 views
11

Sto tentando di utilizzare GoogleTest per testare una funzione semplice, ma mentre eseguo make nella mia cartella di compilazione, il compilatore invia i messaggi di errore Undefined Reference. Ho fatto riferimento al file di intestazione gtest, quindi non sono sicuro di cosa sia sbagliato. Qualche idea? Sono nuovo sull'intero argomento sia di Unix che di Unit Testing, quindi mi potrebbe benissimo mancare qualcosa di semplice. Grazie in anticipo!Gtest: riferimenti non definiti

messaggi di errore:

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; 
} 

Ecco il mio file 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) 
+0

aggiunto tag cmake – PiotrNycz

+0

Si noti che Google consiglia di NON creare una libreria, ma di includere il codice GTest nel progetto. Vedi https://code.google.com/p/googletest/wiki/FAQ#Why_is_it_not_recommended_to_install_a_pre-compiled_copy_of_Goog – Mawg

risposta

8

L'installazione sembra quasi corretta. Tuttavia, è necessario disporre di 2 funzioni separate main; uno per l'eseguibile reale Proj2 e un altro con gtest include e funzioni per l'eseguibile di prova unit-test.

Si potrebbe fare questo avendo 2 diversi file main.cpp, ad esempio main.cpp e test_main.cpp. Quello che hai mostrato sarebbe test_main.cpp e sarebbe incluso nel comando add_executable(unit-test ....

Il tuo nuovo main.cpp non avrebbe alcun riferimento a gtest, include o funzioni.

+0

Grazie, quello era il mio problema. Stavo usando gtest_main nel file CMakeLists, quindi ho dovuto semplicemente rimuovere le funzioni gtest nel mio main.cpp. – Vance

5

Da errori del linker è ovvio che non è stato collega GTEST biblioteca al tuo programma di test.

Vedi http://code.google.com/p/googletest/wiki/Primer

Per scrivere un programma di test utilizzando Google prova, è necessario compilare Google prova in una libreria e collegare il test con esso. ...

Basta vedere questo documento per i dettagli sul compilatore e sul sistema.

+1

Grazie per l'aiuto. Ho letto il link che hai fornito, ma sembrava saltare i dettagli sul collegamento corretto della libreria gtest (dato che non sto usando un IDE). Ho usato CMake per generare i file di build, quindi è qui che dovrebbe avvenire il collegamento, no? Ho fornito il mio file CMakeLists.txt per ulteriori chiarimenti – Vance

+1

Segui questo link: http://stackoverflow.com/questions/8507723/how-to-start-working-with-gtest-and-cmake – PiotrNycz

Problemi correlati