You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CTest中如何像GTest那样单独注册QTest测试用例

QTest测试用例单独注册到CTest的解决方案

完全可以实现QTest单个测试用例独立注册到CTest,CMake 3.19及更高版本已经内置了和GTest功能对应的官方支持。

官方内置函数(推荐)

CMake自带QtTest模块,提供了和GTEST_ADD_TESTS、GTEST_DISCOVER_TESTS功能完全对应的两个函数:

1. qtest_add_tests

对应gtest_add_tests,在构建阶段扫描测试源码中的QTest宏定义提取测试用例,适合测试用例固定写在源文件中的场景,用法示例:

# 依赖引入
find_package(Qt6 REQUIRED COMPONENTS Test)
include(QtTest)

# 编译测试可执行文件
add_executable(qtest_demo test_case1.cpp test_case2.cpp)
target_link_libraries(qtest_demo PRIVATE Qt6::Test)

# 批量注册所有测试用例到CTest
qtest_add_tests(TARGET qtest_demo)

2. qtest_discover_tests

对应gtest_discover_tests,在构建结束后通过运行测试可执行文件提取全部测试用例,支持动态生成的测试用例,新增测试函数时无需修改CMake配置,会自动发现注册,用法示例:

qtest_discover_tests(qtest_demo)

低版本CMake兼容方案

如果使用的CMake版本低于3.19,可以利用QTest可执行文件的-functions参数(执行后会输出所有测试用例名称),自行实现测试用例的批量注册,简单实现示例如下:

add_executable(qtest_demo test_case.cpp)
target_link_libraries(qtest_demo PRIVATE Qt5::Test)

# 提取所有测试用例名称
add_custom_command(TARGET qtest_demo POST_BUILD
    COMMAND qtest_demo -functions > ${CMAKE_CURRENT_BINARY_DIR}/qtest_cases.txt
    BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/qtest_cases.txt
)

file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/qtest_cases.txt QTEST_CASE_LIST)

# 逐个注册测试用例
foreach(test_case ${QTEST_CASE_LIST})
    add_test(NAME qtest_demo.${test_case} COMMAND qtest_demo ${test_case})
endforeach()

完成配置后,执行ctest时就会显示每个测试用例的执行结果,失败时可以直接定位到具体的测试用例,和GTest的使用体验一致。

内容的提问来源于stack exchange,提问作者Alexander Khristosenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:30:03