【问题标题】:QTestLib: Problem testing a Target = appQTestLib:测试目标=应用程序的问题
【发布时间】:2011-07-06 14:54:33
【问题描述】:

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

我的项目结构如下:

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-Subproject 转换为库(TARGET = lib in src.pro)。然后我将以下行添加到 tests.pro 中,一切正常:

LIBS += ../libSrc.so

第二个是命名test.pro中ClassA使用的所有文件。这意味着我的 tests.pro 看起来像:

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

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

【问题讨论】:

  • 我没有得到 我不能使用第一个解决方案 ...但是对于您的问题,如果 ClassA 实际上 实例化ClassB 所以是的,你必须在你的测试可执行文件中编译'ClassB.cpp',否则你会得到一个undefined reference ...

标签: qt dependencies qtestlib


【解决方案1】:

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

SOURCES += $$files(../pathToCppDir/*.cpp)
HEADERS += $$files(../pathToHppDir/*.h)
SOURCES -= ../pathToCppDir/main.cpp          // excluding second main(){}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多