Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QTestLib:测试目标=应用程序时出现问题_Qt_Dependencies_Qtestlib - Fatal编程技术网

QTestLib:测试目标=应用程序时出现问题

QTestLib:测试目标=应用程序时出现问题,qt,dependencies,qtestlib,Qt,Dependencies,Qtestlib,我的单元测试项目中的依赖项有问题 我的项目结构如下: MyProject |---MyProject.pro |---src | |---src.pro | |---ClassA.h | |---ClassA.cpp | |---ClassB.h | |---ClassB.cpp | |---tests |--tests.pro |--testClassA.cpp MyPro

我的单元测试项目中的依赖项有问题

我的项目结构如下:

MyProject
  |---MyProject.pro
  |---src
  |     |---src.pro
  |     |---ClassA.h
  |     |---ClassA.cpp    
  |     |---ClassB.h
  |     |---ClassB.cpp
  |
  |---tests  
        |--tests.pro
        |--testClassA.cpp
MyProject.pro:

TEMPLATE = subdirs
SUBDIRS = src tests
src.pro:

TEMPLATE = app
TARGET = someApp
HEADERS += classA.h classB.h
SOURCES += classA.cpp classB.cpp
假设ClassA调用ClassA.cpp中的ClassB:

void ClassA::someFunctionInClassA()
{
   ClassB b;
}
现在我想对ClassA进行单元测试。我找到了两种方法。 第一个是将src子项目转换为库(src.pro中的TARGET=lib)。然后,我将以下行添加到tests.pro及其所有文件:

LIBS += ../libSrc.so
第二个是在test.pro中命名ClassA使用的所有文件。这意味着my tests.pro看起来像:

TARGET = testclassA
TEMPLATE = app
/*...*/
HEADERS += ../src/ClassA.h \
           ../src/ClassB.h
SOURCES += testClassA.cpp \
           ../src/ClassA.cpp \
           ../src/ClassB.cpp

我不能使用第一种解决方案(将src项目转换为lib),所以我必须使用第二种解决方案。即使我只想测试其中一个源/头,是否真的有必要命名所有源/头?
谢谢你的建议

我不能使用第一种解决方案,这意味着我不能对源代码做太多更改。现在什么是TARGET=app,必须保持为app。我唯一的任务是将单元测试添加到项目中。 我找到了一个解决方法,不显式命名所有类: 在tests.pro中:

SOURCES += $$files(../pathToCppDir/*.cpp)
HEADERS += $$files(../pathToHppDir/*.h)
SOURCES -= ../pathToCppDir/main.cpp          // excluding second main(){}
我不明白我不能使用第一种解决方案。。。但是对于您的问题,如果
ClassA
实际实例化
ClassB
,那么您必须在测试可执行文件中编译'ClassB.cpp',否则您将得到一个
未定义的引用
。。。