在设置我最近的项目时,我试图使用GoogleTest。目前我有这个:
macro(add_test_l TEST_NAME)
# Create the executable and use the last arguments as source files.
add_executable(${TEST_NAME} ${ARGN})
# Link in the AMR and gtest libraries.
target_link_libraries(${TEST_NAME}
${PROJECT_NAME}
gtest
gmock
gtest_main
)
# Add the test to gtest.
add_test(
NAME ${TEST_NAME}
COMMAND ${TEST_NAME}
)
list(APPEND TEST_SOURCE_FILES ${ARGN})
endmacro()
然后我可以添加我的测试,如add_test_l(Element Sets/Element.test.cpp)
,这是工作和方便。但是这当然会为每个测试创建一个可执行文件,这并不是一件坏事,因为它允许对单个文件进行快速测试。
虽然我确实希望能够使用单个exe运行所有测试(这样CI将更容易),所以我在宏的末尾有该列表,并在添加了所有单独的测试后,我有:
add_executable(all_tests ${TEST_SOURCE_FILES})
target_link_libraries(all_tests
${PROJECT_NAME}
gtest
gmock
gtest_main
)
创建一个EXE来运行我所有的测试用例。
这看起来效率不高,因为我将所有文件编译两次。有没有更好的方法让我达到预期的结果?也许我可以添加一个选项来启用/禁用单个和所有测试执行。
每个文件都有一个可执行文件是不必要的。为所有测试构建一个可执行文件,并学习gtest选项——gtest_filter。您可以单独运行每个测试:
all_tests --gtest_filter=Element.Test
或者您可以像宏add_test_l
那样运行所有的Element测试:
all_tests --gtest_filter=Element.*
关于命令行选项的更多信息:
all_tests --help
其中一个有用的命令:
all_tests --gtest_list_tests