如何为现有QMake项目添加单元测试且无需将源码迁移至子目录
有两种可行方案可以实现不迁移现有源码的前提下添加单元测试:
方案1:同目录使用subdirs模板,无需调整源码位置
该方案仅需重命名原有项目文件、新增subdirs主项目即可,完全不需要移动现有源码,和常规subdirs项目的兼容度最高,IDE识别效果好。
目录结构
myproject/ myproject.pro # 新建的subdirs类型主项目 src.pro # 原有项目文件直接重命名,和源码同目录 <所有原有源码文件> test/ test.pro <单元测试代码>
主项目配置(myproject.pro)
TEMPLATE = subdirs SUBDIRS += \ app \ test # 配置app子项目路径为当前根目录,使用重命名后的原有项目文件 app.subdirs = $$PWD app.file = $$PWD/src.pro # 保证主程序编译完成后再编译测试项目 test.depends = app
测试项目配置(test/test.pro)
QT += testlib TEMPLATE = app TARGET = unit_test # 引入根目录的头文件 INCLUDEPATH += $$PWD/../ SOURCES += test_main.cpp utils_test.cpp # 若主程序编译为静态/动态库,链接主程序产物即可调用内部逻辑 LIBS += -L$$OUT_PWD/../ -lmyproject
方案2:不使用subdirs模板,单项目多目标配置
如果不想新增项目文件,可以直接在原有.pro文件中添加条件编译分支,通过编译参数控制生成主程序还是测试程序,零目录结构改动。
原有项目文件配置示例
# 原有主程序配置完全保留 TEMPLATE = app TARGET = myproject SOURCES += main.cpp \ utils.cpp HEADERS += utils.h # 新增单元测试条件分支 test { # 替换生成目标名 TARGET = myproject_test # 移除主程序入口,添加测试代码 SOURCES -= main.cpp SOURCES += test/test_main.cpp \ test/utils_test.cpp # 引入测试依赖 QT += testlib INCLUDEPATH += $$PWD }
编译方式
- 编译原有主程序:直接执行
qmake && make即可,和原有逻辑完全一致 - 编译单元测试:执行
qmake "CONFIG+=test" && make,生成测试可执行文件
内容的提问来源于stack exchange,提问作者jdm
相关产品推荐
相关产品推荐

