如何使用cmake一次运行所有gtest文件?

mor*_*ort 5 c++ cmake googletest

我有几个.cpp文件,其中包含针对不同类的测试,如下所示:

#include <gtest/gtest.h>

namespace {
//lots of tests
}

int main(int argc, char** argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
Run Code Online (Sandbox Code Playgroud)

以及一个如下所示的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
)
Run Code Online (Sandbox Code Playgroud)

我喜欢此设置,因为仅对当前正在使用的组件运行测试很方便。执行一个测试文件显然比执行所有测试文件更重要。但是,我时不时要运行所有测试。如何在设置中轻松实现此目的?

Fra*_*ser 6

您可以使用CTest(通常与CMake一起安装)来实现此目的。

首先,你需要includeCTEST模块在你的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)
Run Code Online (Sandbox Code Playgroud)

现在,一旦构建了测试exe,就可以从build文件夹执行CTest来运行所有测试。例如运行Debug测试:

ctest -C Debug
Run Code Online (Sandbox Code Playgroud)

或获得更多详细输出:

ctest -C Debug -V
Run Code Online (Sandbox Code Playgroud)