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