将 GoogleTest 设置为 运行 一个可执行文件中的所有测试
Setting up GoogleTest to run all tests in one executable
在设置我最近的项目时,我尝试使用 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。
这似乎效率不高,因为我将所有文件都编译了两次。有没有更好的方法让我达到预期的结果?也许我可以添加一个选项来启用/禁用个人与所有测试 exes。
没有必要每个文件都有一个可执行文件。为所有测试构建一个可执行文件并学习 gtest 选项 --gtest_filter。您可以 运行 每个单独测试:
all_tests --gtest_filter=Element.Test
或者您可以 运行 所有元素测试,就像宏 add_test_l
那样:
all_tests --gtest_filter=Element.*
提供了有关命令行选项的更多信息:
all_tests --help
有用的命令之一:
all_tests --gtest_list_tests
在设置我最近的项目时,我尝试使用 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。
这似乎效率不高,因为我将所有文件都编译了两次。有没有更好的方法让我达到预期的结果?也许我可以添加一个选项来启用/禁用个人与所有测试 exes。
没有必要每个文件都有一个可执行文件。为所有测试构建一个可执行文件并学习 gtest 选项 --gtest_filter。您可以 运行 每个单独测试:
all_tests --gtest_filter=Element.Test
或者您可以 运行 所有元素测试,就像宏 add_test_l
那样:
all_tests --gtest_filter=Element.*
提供了有关命令行选项的更多信息:
all_tests --help
有用的命令之一:
all_tests --gtest_list_tests