搭建含Qt Test单元测试的Qt CMake动态库项目遇配置问题
Qt+CMake搭建动态库与单元测试项目配置方案
1. 主项目根目录配置
根目录CMakeLists.txt
cmake_minimum_required(VERSION 3.16) project(MyLibraryProject LANGUAGES CXX) # 设置C++标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 查找Qt核心模块(Qt5替换为Qt5) find_package(Qt6 REQUIRED COMPONENTS Core) # 生成动态库 add_library(MyLibrary SHARED MyClass.h MyClass.cpp ) # 链接Qt核心库 target_link_libraries(MyLibrary PRIVATE Qt6::Core) # Windows平台动态库导出宏(必需) target_compile_definitions(MyLibrary PRIVATE MYLIBRARY_LIBRARY) # 暴露头文件路径给测试项目 target_include_directories(MyLibrary PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) # 引入单元测试子目录 add_subdirectory(UnitTests)
MyClass.h(需添加导出宏)
#ifndef MYCLASS_H #define MYCLASS_H #include <QObject> // 动态库导出/导入宏定义 #if defined(MYLIBRARY_LIBRARY) # define MYLIBRARY_EXPORT Q_DECL_EXPORT #else # define MYLIBRARY_EXPORT Q_DECL_IMPORT #endif class MYLIBRARY_EXPORT MyClass : public QObject { Q_OBJECT public: explicit MyClass(QObject *parent = nullptr); int add(int a, int b); // 示例测试方法 }; #endif // MYCLASS_H
MyClass.cpp示例实现
#include "MyClass.h" MyClass::MyClass(QObject *parent) : QObject{parent} {} int MyClass::add(int a, int b) { return a + b; }
2. UnitTests子目录配置
UnitTests/CMakeLists.txt
cmake_minimum_required(VERSION 3.16) # 查找Qt Test模块(Qt5替换为Qt5) find_package(Qt6 REQUIRED COMPONENTS Test) # 生成测试可执行文件 add_executable(UnitTests testcase_1.cpp ) # 链接动态库与Qt Test库 target_link_libraries(UnitTests PRIVATE MyLibrary Qt6::Test) # 注册测试到CTest,支持持续集成 add_test(NAME UnitTests COMMAND UnitTests)
testcase_1.cpp示例测试用例
#include <QTest> #include "MyClass.h" class TestMyClass : public QObject { Q_OBJECT private slots: void testAdd(); }; void TestMyClass::testAdd() { MyClass obj; QCOMPARE(obj.add(2, 3), 5); QCOMPARE(obj.add(-1, 1), 0); } QTEST_APPLESS_MAIN(TestMyClass) #include "testcase_1.moc"
3. Qt Creator适配操作
- 导入项目:打开Qt Creator,选择「文件」→「打开文件或项目」,选中根目录的
CMakeLists.txt,按向导完成Qt版本、编译器的配置。 - 运行测试:在Qt Creator左下角的构建目标下拉菜单中,选择
UnitTests可执行文件,点击运行按钮即可执行测试;也可通过「工具」→「测试」→「运行所有测试」批量执行。 - 查看结果:测试完成后,「应用程序输出」面板会显示测试通过/失败的详细信息;若需更直观的测试报告,可启用Qt Creator的「测试」面板。
- 持续集成适配:项目构建完成后,可直接用
cmake --build .编译,用ctest命令执行所有测试,适配Jenkins、GitLab CI等集成工具。
常见问题解决
- Windows下动态库找不到:Qt Creator构建时会自动将动态库路径加入环境变量;手动运行测试需将动态库所在目录添加到系统
PATH,或在根目录CMake中设置CMAKE_RUNTIME_OUTPUT_DIRECTORY统一输出目录。 - Moc文件报错:确保测试类添加了
Q_OBJECT宏,CMake会自动调用moc工具生成对应的moc文件,无需手动处理。
内容的提问来源于stack exchange,提问作者Rolf Hausen
相关产品推荐
相关产品推荐

