Как запустить все файлы gtest одновременно, используя cmake?
У меня есть несколько файлов.cpp, которые содержат тесты для разных классов и выглядят так:
#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
)
Мне нравится эта настройка, потому что удобно запускать только тесты для компонента, над которым я сейчас работаю. Выполнение одного тестового файла, очевидно, намного сложнее, чем выполнение всех из них. Тем не менее, время от времени я хочу запустить все тесты. Как я могу легко добиться этого в моей настройке?
1 ответ
Вы можете использовать CTest (обычно он устанавливается вместе с CMake) для достижения этой цели.
Во-первых, вам нужно include
модуль CTest в вашем 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)
Теперь, когда ваши тестовые файлы собраны, вы можете запустить CTest из папки сборки, чтобы запустить все тесты. Например, чтобы запустить тесты отладки:
ctest -C Debug
или чтобы получить более подробный вывод:
ctest -C Debug -V