2013-12-04 3 views
3

У меня есть несколько файлов .cpp, которые содержат тесты для различных классов и выглядят следующим образом:Как запускать все файлы gtest одновременно с помощью cmake?

#include <gtest/gtest.h> 

namespace { 
//lots of tests 
} 

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

и CMakeLists.txt файл, который выглядит следующим образом:

add_subdirectory(/usr/src/gtest gtest) 
include_directories(${GTEST_INCLUDE_DIR}) 

add_executable(TestA TestA.cpp) 
target_link_libraries(TestA 
    gtest 
) 

add_executable(TestB TestB.cpp) 
target_link_libraries(TestB 
    gtest 
) 

add_executable(TestC TestC.cpp) 
target_link_libraries(TestC 
    gtest 
) 

Мне нравится эта установка, потому что это удобно запускать тесты только для компонента, над которым я сейчас работаю. Выполнение одного тестового файла, очевидно, намного лучше, чем выполнение всех из них. Однако время от времени я хочу запустить все тесты. Как я могу достичь этого легко в рамках моей настройки?

ответ

4

Вы можете использовать CTest (обычно это устанавливается вместе с CMake) для достижения этого.

Во-первых, вам нужно include в CTest module в вашем CMakeLists.txt, то вам просто необходимо использовать команду add_test для каждого из тестов исполняемых файлов:

include(CTest) 
add_subdirectory(/usr/src/gtest gtest) 
include_directories(${GTEST_INCLUDE_DIR}) 

add_executable(TestA TestA.cpp) 
target_link_libraries(TestA gtest) 
add_test(NAME AllTestsInA COMMAND TestA) 

add_executable(TestB TestB.cpp) 
target_link_libraries(TestB gtest) 
add_test(NAME AllTestsInB COMMAND TestB) 

add_executable(TestC TestC.cpp) 
target_link_libraries(TestC gtest) 
add_test(NAME AllTestsInC COMMAND TestC) 

Теперь, когда ваши испытания EXEs построены, из вашей папки сборки вы можете выполнить CTest для запуска всех тестов. Например. для запуска тестов отладки:

ctest -C Debug 

или получить более подробный вывод:

ctest -C Debug -V 
Смежные вопросы