QtTest单元测试,如何添加位于另一个项目中的头文件?

时间:2012-08-03 22:17:49

标签: c++ qt unit-testing qt-creator qttest

也许我错过了一些东西,但对我来说,为QtTest框架提供的唯一教程让你测试QString类似乎真的很蠢。

单元测试的典型用例是....你自己编写的测试类,但是没有提到如何在教程中测试不同项目中的类以进行测试,而google也失败了(和我真的怀疑复制粘贴类是一种很好的方法。)

我甚至翻阅了3本不同的Qt书籍而没有提及QtTest。

2 个答案:

答案 0 :(得分:8)

您可以在.pro文件中添加包含其他项目目录的路径,如下所示:

INCLUDEPATH += <directory>

然后它应该能够找到你所包含的标题。

修改:根据评论

这完全是另一个故事。未定义的引用通常意味着您缺少依赖项。这通常可以通过以下两种方法之一来解决。

最简单的是包含缺少的源文件:

INCLUDEPATH += ../myotherproject/
SOURCES = main.cpp ../myotherproject/missingsource.cpp

或许更好的解决方案是通过将可编译代码编译为库并链接到它来公开可重用代码。例如。 Windows上的.DLL或.LIB,Linux上的.SO或.A。

INCLUDEPATH += ../myotherproject/
win32:LIBS += ../myotherproject/linkme.lib

您能告诉我们您遇到的具体错误吗?

答案 1 :(得分:8)

我建议您将主应用程序项目和单元测试项目所需的所有源代码和标题放在一个.pri(.pro include)文件中。将此文件放在主项目中。然后在两个项目中包含此文件。

请注意,每当向主项目添加新类时,QtCreator会自动将SOURCES +=HEADERS +=行附加到.pro文件,但您希望它们位于.pri文件中,因此你需要手动移动它们。我认为没有办法告诉QtCreator把它们放在哪里。


主要项目:

myproject.pro
myproject.pri
main.cpp
someclass.h
someclass.cpp

myproject.pro:

QT += ...
TARGET = ...
...

SOURCES += main.cpp       # "private" to this project
include(myproject.pri)    # needed in unit test

myproject.pri:

SOURCES += someclass.cpp
HEADERS += someclass.h

单元测试项目:

unittest.pro
main.cpp
test.h
test.cpp

unittest.pro:

QT += ...
TARGET = ...
...

SOURCES += main.cpp test.cpp
HEADERS += test.h

# include the classes from the main project:
INCLUDEPATH += ../myproject/
include(../myproject/myproject.pri)