15

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

单元测试的典型用例是....测试您自己编写的类,但是在教程中没有提到如何在不同的项目中引用您的类进行测试,谷歌也让我失望了(我真的怀疑复制粘贴类是一个很好的方法)。

我什至翻阅了 3 种不同的 Qt 书籍,但没有提到 QtTest。

4

2 回答 2

9

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

INCLUDEPATH += <directory>

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

编辑:基于评论

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

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

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

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

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

你能告诉我们你得到的具体错误吗?

于 2012-08-03T23:24:21.600 回答
9

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

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


主要项目:

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

我的项目.pro:

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

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

我的项目.pri:

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

单元测试项目:

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

单元测试.pro:

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

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

# include the classes from the main project:
INCLUDEPATH += ../myproject/
include(../myproject/myproject.pri)
于 2012-08-12T03:58:16.100 回答