我正在使用 gtest 为我的应用程序编写单元测试。我还有 ctest 运行 add_test CMake 命令添加的所有可执行文件。测试执行开始时是否可以通过 ctest 传递 gtest 变量?
例如,我有时想用 --gtest_filter 标志过滤掉测试,但我不知道如何或是否可以通过 ctest 实现这一点?我尝试过以下方法:
ctest --gtest_filter=AppTest.*
ctest --test-arguments="--gtest_filter=AppTest.*"
但是两者仍然运行所有测试,而不是过滤的测试。
谢谢!
对于 2019 年在这里查看的任何人,最新版本的 CMake 有
gtest_discover_tests
(GoogleTest 模块),它将把你的测试提升到 CTest 中,你可以从那里进行过滤。
IOW 而不是在 CTest 中使用单个
add_test
,它将使用 --gtest_list_tests
为每个测试调用 add_test
。
如果您有一个包含多个测试二进制文件的复杂项目(==多个 CMake
add_test
命令),每个文件可能有许多不同的 Google 测试,那么另一种选择是:
env GTEST_FILTER="*some-keyword*" ctest -VV -R '.*some-test-type.*'
some-keyword 将传递给
--gtest_filter
CTest 将使用 some-test-type 来过滤哪个测试二进制文件(
add_test
命令)。
例如:
env GTEST_FILTER="*authentication*" ctest -VV -R '.*system.*'
...仅运行与身份验证相关的系统测试。任何非身份验证或非系统测试都会被跳过。