Qt单元测试中,如何通过相对路径在运行时复制测试文件?
解决Qt单元测试中相对路径复制文件的问题
可以通过相对路径实现,但核心问题是运行测试时的当前工作目录不一定是unitary_test.cpp所在的tests/Test/目录,导致你写的./data/controller.bin指向了错误的位置。下面是几种可靠的解决方法:
方法1:用__FILE__宏获取绝对路径(最通用)
利用C++的__FILE__宏获取当前测试文件的完整路径,以此为基准计算测试数据的绝对路径,不受运行时工作目录影响:
QTemporaryDir dir; const std::string controllerPath = "controller.bin"; // 获取当前测试文件的绝对路径,进而得到它所在的目录 QString testFileFullPath = QString::fromUtf8(__FILE__); QDir testDir = QFileInfo(testFileFullPath).dir(); // 拼接出data目录下controller.bin的绝对路径 QString sourceFilePath = testDir.filePath("./data/" + QString::fromStdString(controllerPath)); QString destFilePath = QDir(dir.path()).filePath(QString::fromStdString(controllerPath)); if (QFile::copy(sourceFilePath, destFilePath)) { // 复制成功后的逻辑 } else { qDebug() << "复制失败:源文件不存在,路径为" << sourceFilePath; }
方法2:手动设置测试项目的工作目录
如果用Qt Creator等IDE,可在测试项目的运行配置里,将工作目录设置为tests/Test/的路径(可以是相对项目根目录的./tests/Test/,也可以是绝对路径)。这样运行时./data/controller.bin就能正确指向目标文件。
缺点是换环境或其他开发者运行时需要重新配置,通用性不如方法1。
方法3:构建时自动复制测试数据
用构建脚本(qmake/CMake)在编译测试程序时,自动把data目录复制到测试程序的输出目录:
- 若用qmake,在测试项目的
.pro文件中添加:test.files = data/* test.path = $$OUT_PWD INSTALLS += test
构建完成后,测试数据会被同步到输出目录,运行测试时直接用./data/controller.bin就能访问到。
内容的提问来源于stack exchange,提问作者LPo
相关产品推荐
相关产品推荐

