2012-11-25 18 views
10

Ho un progetto con la seguente struttura:Nessun test trovato quando si utilizza GTEST con CMake/CTest

linalg 
├── build 
├── CMakeLists.txt 
├── docs 
│   └── Doxyfile 
├── include 
│   └── linalg 
│    └── vector3.hpp 
├── src 
│   ├── CMakeLists.txt 
│   └── linalg 
│    └── vector3.cpp 
└── test 
    ├── CMakeLists.txt 
    └── linalg 
     └── test_vector3.cpp 

Il file test_vector3.cpp è un file di test di unità GTEST che fornisce due semplici test. Il livello superiore CMakeLists.txt imposta semplicemente la include e aggiunge lo src e prova sottodirectory:

cmake_minimum_required(VERSION 2.8) 

project(linalg) 

include_directories(include) 
add_subdirectory(src) 
add_subdirectory(test) 

Il file/CMakeLists.txt src compila vector3.cpp in una libreria statica:

cmake_minimum_required(VERSION 2.8) 

add_library(linalg linalg/vector3.cpp) 

Il file/CMakeLists.txt test si basa sull'esempio fornito nel /usr/share/cmake-2.8/Modules/FindGTest.cmake:

cmake_minimum_required(VERSION 2.8) 

enable_testing() 
find_package(GTest REQUIRED) 
include_directories(${GTEST_INCLUDE_DIRS}) 

add_executable(test_vector3 linalg/test_vector3.cpp) 
target_link_libraries(test_vector3 linalg ${GTEST_BOTH_LIBRARIES} pthread) 

add_test(test_vector3 test_vector3) 

ho quindi eseguire il seguente:

01.235.

Ottengo la libreria liblinalg.a compilata correttamente per creare/src e ottengo l'eseguibile test_vector3 compilato correttamente in build/test. Posso eseguire il file eseguibile test_vector3 e ottengo l'uscita dal googletest dire che tutti i test sono passati, se corro make test ottengo nessuna uscita di alcun tipo e se corro ctest .. ricevo un messaggio che dice:

Test project /home/ryan/GitHub/linalg/build 
No tests were found!!! 

C'è qualcosa che mi manca? O ho appena frainteso come funziona meglio con gtest?

risposta

19

Il nocciolo del problema è che enable_testing deve essere chiamato dal tuo CMakeLists.txt di livello superiore in questo caso. L'aggiunta di include(CTest) al tuo CMakeLists.txt di livello superiore dovrebbe risolvere il problema per te.

Ciò consentirebbe di rimuovere la chiamata enable_testing in test/CMakeLists.txt, poiché il sottomodulo CTest chiama enable_testing internamente.

Problemi correlati