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

搭建含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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 06:22:22