Joh*_*acs 13 c++ qt unit-testing qt-creator qttest
也许我错过了一些东西,但对我而言,提供QtTest框架的唯一教程让你测试QString类似乎真的很愚蠢.
单元测试的典型用例是....你自己编写的测试类,但没有提到如何在教程中测试不同项目中的类以进行测试,谷歌也让我失望(我真的怀疑复制粘贴类是一种很好的方法).
我甚至翻阅了3本不同的Qt书籍而没有提及QtTest.
我建议您将主应用程序项目和单元测试项目所需的所有源代码和标题放在一个.pri(.pro include)文件中.将此文件放在主项目中.然后在两个项目中包含此文件.
请注意,每当向主项目添加新类时,QtCreator会自动将SOURCES +=和HEADERS +=行附加到.pro文件,但您希望它们位于.pri文件中,因此您需要手动移动它们.我认为没有办法告诉QtCreator把它们放在哪里.
主要项目:
myproject.pro
myproject.pri
main.cpp
someclass.h
someclass.cpp
Run Code Online (Sandbox Code Playgroud)
myproject.pro:
QT += ...
TARGET = ...
...
SOURCES += main.cpp # "private" to this project
include(myproject.pri) # needed in unit test
Run Code Online (Sandbox Code Playgroud)
myproject.pri:
SOURCES += someclass.cpp
HEADERS += someclass.h
Run Code Online (Sandbox Code Playgroud)
单元测试项目:
unittest.pro
main.cpp
test.h
test.cpp
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
您可以在.pro文件中添加包含其他项目目录的路径,如下所示:
INCLUDEPATH += <directory>
Run Code Online (Sandbox Code Playgroud)
然后它应该能够找到您包含的标题.
编辑:根据评论
那是另一个故事.未定义的引用通常意味着您缺少依赖项.这通常可以通过以下两种方法之一来解决.
最简单的是包含缺少的源文件:
INCLUDEPATH += ../myotherproject/
SOURCES = main.cpp ../myotherproject/missingsource.cpp
Run Code Online (Sandbox Code Playgroud)
也许更好的解决方案是通过将可编译代码编译为库并链接到它来公开可重用代码.例如Windows上的.DLL或.LIB以及Linux上的.SO或.A.
INCLUDEPATH += ../myotherproject/
win32:LIBS += ../myotherproject/linkme.lib
Run Code Online (Sandbox Code Playgroud)
你能告诉我们你得到的具体错误吗?