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
相关产品推荐
相关产品推荐

