我正在Qt Creator中进行单元测试Qt项目,该项目引用了我要测试的项目中的文件。现在,我是否引用了我想要通过.pri文件测试的类,或者直接将相关文件添加到单元测试项目的SOURCES和HEADERS变量中(并且.pri文件似乎真的看起来一样,它只包含SOURCES和HEADERS条目),从主项目添加文件似乎覆盖了单元测试项目中的main.cpp。
我的意思是当我构建并运行uni tests可执行文件时,原始项目的main()
函数运行!如果我重命名原始项目中的main.cpp,或者单元测试项目中的main.cpp(更改其.pro文件),那么事情就会顺利进行。好吧,我可以忍受这样的解决方案,但它有点不舒服,因为将来有一天我可能会意外地在这两个项目中的某些文件中使用相同的名称,谁知道,也许会得到错误,这将成为追踪的噩梦。除此之外,我只是好奇这种行为的原因是什么。
当然.pri文件只包括类头和cpp文件,而不是原始应用程序的main.cpp,例如就我而言:
HEADERS += \
../Project/fooclass.h
SOURCES += \
../Project/fooclass.cpp
此外,两个项目都在彼此相邻的目录中,而不是嵌套。
修改:Frank Osterfeld要求查看我的测试专家档案,所以这里是:
Test的专业档案:
QT += core
QT -= gui
QT += testlib
TARGET = Tests
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += \
test_class.cpp \
main_unit_tests.cpp
HEADERS += \
AutoTest.h \
test_class.h \
include(trial.pri)
Trial.pri包含我要测试的主项目中的文件。 main_unit_tests.cpp(从原始main.cpp重命名为ad-hoc解决方案)包含:
#include <QtCore/QCoreApplication>
#include "AutoTest.h"
TEST_MAIN
TEST_MAIN
在AutoTest.h中定义为
#define TEST_MAIN \
int main(int argc, char *argv[]) \
{ \
return AutoTest::run(argc, argv); \
}
访问此page,了解AutoTest.h的功能。简而言之,它使得使用Qt框架进行多单元测试的麻烦有点麻烦。
编辑: 亲。主项目的文件(即包含我要测试的类的文件)是:
QT += core
QT -= gui
TARGET = Project
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp \
fooclass.cpp
HEADERS += \
fooclass.h
它位于路径上:... \ Unit_Test \ Project
单元测试项目位于路径上:... \ Unit_Test \ Tests
现在事情正常,因为定义main()
的文件在两个项目中都不同。一旦我重命名它们就会一样,单元测试项目会影响原始项目的主要功能。
答案 0 :(得分:0)
文件名无关紧要,重要的是在单元测试的构建中包含了多少个main()函数。不要将实际应用程序的main.cpp包含在单元测试项目的SOURCES中,你应该没问题。
答案 1 :(得分:0)
GNU make实用程序并不是最好的。
如果您在同一文件夹中创建了实际应用和测试项目的obj文件,则可能会链接错误的main.o
。
确保您的测试项目和实际应用项目构建文件夹不同,或者只是不使用main.cpp
文件名两次。