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

Qt Creator中qmake共享库如何集成Google Test编写自动化测试

qmake项目接入Google Test自动化测试方案

核心思路

  • 正式共享库、测试程序作为两个完全独立的项目隔离构建,测试代码不会被编译进正式发布的库文件
  • 无需强制切换CMake,qmake原生支持完整的测试构建、运行流程
  • Qt Creator可原生识别测试用例,支持单独运行、调试单个用例

方案1:保留qmake构建系统(无需换构建工具,新手友好)

步骤1:调整目录结构

在原有目录基础上补充项目配置文件,最终结构如下:

Example/
├── Example.pro          # 原有库项目配置,无需大改
├── Example.pri          # 原有库对外配置,保留
├── project.pro          # 新增:根目录总项目配置
├── src/
│   └── Example.cpp
├── include/
│   ├── Example.hpp
│   └── Example_global.hpp
└── tests/
    ├── tests.pro        # 新增:测试可执行程序配置
    └── src/
        ├── main.cpp     # 原有测试入口文件
        └── test_example.cpp # 新增:具体测试用例文件

步骤2:编写配置文件

  1. 根目录新建总项目配置project.pro,统一管理构建顺序:

    TEMPLATE = subdirs
    CONFIG += ordered
    
    # 按依赖顺序构建:先编正式库,再编测试程序
    SUBDIRS += \
        Example \
        tests
    
    # 声明依赖关系,避免构建顺序错误
    tests.depends = Example
    
  2. 新建测试项目配置tests/tests.pro,声明Google Test依赖与库引用:

    QT -= gui
    CONFIG += c++20 console
    CONFIG -= app_bundle # macOS下直接生成命令行程序,不生成.app包
    
    TEMPLATE = app
    TARGET = ExampleTests
    
    # 依赖配置:通过Qt Maintenance Tool安装对应Qt版本的Google Test组件后,以下配置可直接生效
    LIBS += -lgtest -lgtest_main -lpthread
    # 若为手动编译安装的Google Test,替换为实际头文件、库文件路径即可
    # INCLUDEPATH += /your/local/gtest/include
    # LIBS += -L/your/local/gtest/lib -lgtest -lgtest_main -lpthread
    
    # 引入Example库的头文件路径
    EXAMPLE_ROOT = $$PWD/..
    INCLUDEPATH += $$EXAMPLE_ROOT/include
    # 链接构建生成的Example共享库
    LIBS += -L$$OUT_PWD/../Example -lExample
    
    # 加入测试代码
    SOURCES += \
        src/main.cpp \
        src/test_example.cpp
    
  3. 测试入口文件tests/src/main.cpp直接使用原有草稿即可:

    #include <gtest/gtest.h>
    
    int main(int argc, char* argv[])
    {
      testing::InitGoogleTest(&argc, argv);
      return RUN_ALL_TESTS();
    }
    
  4. 编写测试用例,新建tests/src/test_example.cpp:

    #include <gtest/gtest.h>
    #include "Example.hpp"
    
    // 示例测试用例,可根据实际业务逻辑扩展
    TEST(ExampleTest, ConstructorNoException) {
        EXPECT_NO_THROW({
            Example ex;
        });
    }
    

步骤3:Qt Creator中运行测试

  • 打开Qt Creator,选择打开项目,选中根目录的project.pro
  • 选择对应构建套件,等待qmake解析完成后构建项目,构建顺序会自动处理
  • 直接运行ExampleTests项目,控制台会输出所有用例的通过/失败统计
  • 可视化管理用例:打开「工具-选项-测试」,启用Google Test支持,构建完成后左侧「Tests」面板会列出所有识别到的用例,支持单独运行、调试单个用例

之前Visual Studio自动把测试文件加入库项目SOURCES列表的问题,在隔离项目结构下完全不会出现,测试代码和正式库产物完全分离,发布时不会带入测试逻辑。


方案2:切换CMake构建系统(长期维护推荐)

如果后续需要切换CMake,所有配置文件按层级放置即可,无需复杂逻辑。

步骤1:编写CMake配置

  1. 根目录新建总配置CMakeLists.txt:

    cmake_minimum_required(VERSION 3.16)
    project(Example VERSION 0.1 LANGUAGES CXX)
    
    set(CMAKE_CXX_STANDARD 20)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    set(CMAKE_AUTOMOC ON)
    
    # 查找Qt依赖
    find_package(Qt6 REQUIRED COMPONENTS Core)
    # Qt5环境替换为 find_package(Qt5 REQUIRED COMPONENTS Core)
    
    enable_testing()
    
    add_subdirectory(src)
    add_subdirectory(tests)
    
  2. src目录下新建库配置src/CMakeLists.txt:

    add_library(Example SHARED
        Example.cpp
        ${CMAKE_SOURCE_DIR}/include/Example.hpp
        ${CMAKE_SOURCE_DIR}/include/Example_global.hpp
    )
    
    target_include_directories(Example PUBLIC
        ${CMAKE_SOURCE_DIR}/include
    )
    
    target_compile_definitions(Example PRIVATE EXAMPLE_LIBRARY)
    target_link_libraries(Example PRIVATE Qt::Core)
    
  3. tests目录下新建测试配置tests/CMakeLists.txt:

    # 查找已安装的Google Test,提前通过Qt Maintenance Tool/系统包管理器安装即可
    find_package(GTest REQUIRED)
    
    add_executable(ExampleTests
        src/main.cpp
        src/test_example.cpp
    )
    
    target_link_libraries(ExampleTests PRIVATE
        Example
        GTest::gtest
        GTest::gtest_main
    )
    
    # 自动注册测试到Qt Creator测试面板
    include(GoogleTest)
    gtest_discover_tests(ExampleTests)
    

步骤2:Qt Creator中使用

  • 打开Qt Creator,选中根目录CMakeLists.txt导入项目
  • 选择构建套件等待配置完成,构建后即可在测试面板看到所有用例,操作逻辑和qmake项目完全一致

注意事项

  • 发布正式库时,仅需要打包include目录下的头文件、构建生成的共享库文件(.so/.dll/.dylib)即可,测试程序不会影响正式库产物
  • 若运行测试时提示找不到共享库,Windows环境可将库构建输出目录加入PATH,或把库文件复制到测试程序同目录;Linux/macOS环境下构建系统会自动配置rpath,一般无需额外处理
  • 测试代码中引用库头文件的逻辑和业务代码正常调用库的逻辑完全一致,所有对外暴露的接口都可以直接覆盖测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:57:21