Как запустить все файлы 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
Другие вопросы по тегам