将参数从 ctest 传递到 gtest

问题描述 投票:0回答:4

我正在使用 gtest 为我的应用程序编写单元测试。我还有 ctest 运行 add_test CMake 命令添加的所有可执行文件。测试执行开始时是否可以通过 ctest 传递 gtest 变量?

例如,我有时想用 --gtest_filter 标志过滤掉测试,但我不知道如何或是否可以通过 ctest 实现这一点?我尝试过以下方法:

ctest --gtest_filter=AppTest.*
ctest --test-arguments="--gtest_filter=AppTest.*"

但是两者仍然运行所有测试,而不是过滤的测试。

谢谢!

cmake googletest ctest
4个回答
5
投票

对于 2019 年在这里查看的任何人,最新版本的 CMake 有

gtest_discover_tests
(GoogleTest 模块),它将把你的测试提升到 CTest 中,你可以从那里进行过滤。

IOW 而不是在 CTest 中使用单个

add_test
,它将使用
--gtest_list_tests
为每个测试调用
add_test


2
投票

例如,要使测试的输出更加详细:

$ make test ARGS="-V"

运行特定测试:

$ ctest -R <regex>

注意: 您可以查看 this 获取一些示例。


1
投票

看看 CMake 的

add_test
add_test

要从 CTest 中过滤掉测试,您可以使用 -L ctest


0
投票

如果您有一个包含多个测试二进制文件的复杂项目(==多个 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.*'

...仅运行与身份验证相关的系统测试。任何非身份验证或非系统测试都会被跳过。

© www.soinside.com 2019 - 2024. All rights reserved.