设置GoogleTest以在一个可执行文件中运行所有测试



在设置我最近的项目时,我试图使用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

相关内容

最新更新