如何使用子目录使用 QtTest 对 Qt 应用程序进行单元测试
how to unit test a Qt application with QtTest using subdirs
我在搜索这个特定问题时发现了一些其他问题,但我无法让我的设置与我的单元测试项目一起工作。
project info: ( optional reading)
I am in the beginning of my final undergraduate project, where I am to
create an IDE for the language Promula and the the
verification tool Spin. The professor I am doing this with expects to
use it in his classes and for future undergraduates to keep improving. It is also meant to be a open source project everyone can contribute to.
我的文件夹结构:
QSpin
-QSpin.pro
-QSpinApplication
--QSpinapplication.pro
--QSpinApplication.pri
--include
---Workspace
----*.h
--src
---Workspace
----*.cpp
-QSpinApplicationTests
--QSpinApplicationTests.pro
--WorkspaceGroupTests
---WorkspaceGroupTests.pro
----some cpp testfile
我的 QSpinApplication 编译和运行没有任何问题。导入我有的所以可以导入。
#include <Workspace/(file_name).h>
但是在我的测试项目 WorkspaceGroupTests 中,我想以同样的方式包含 headers,但我无法让它工作。除此之外,我假设测试项目需要知道 cpp 文件在哪里。如果我不使用任何应用程序 headers,测试项目将使用默认测试用例编译和运行。
目前我正在使用默认的影子构建,其根文件夹位于 QSpin 文件夹中。
Any idea of how i get my test project working correctly, to actual be able to test my application classes?
QSpin.pro:
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += \
QSpinApplication\QSpinApplication.pro \
QSpinApplicationTests
QSpinApplication.pro:
QT += quick qml gui
CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES +=src/main.cpp
include(QSpinApplication.pri)
RESOURCES += qml.qrc
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
QSpinApplication.pri:
#//DEPENDPATH += $$PWD
INCLUDEPATH += ./include
SOURCES +=src/workspace/workspaceview.cpp \
src/workspace/groupitem.cpp \
src/workspace/groupitemsplitter.cpp \
src/workspace/workspacegroup.cpp \
src/workspace/workspaceviewattached.cpp \
src/workspace/workspaceviewiteminfo.cpp \
src/workspace/workspacegrouplinknode.cpp
HEADERS += \
include/workspace/workspaceview.h \
include/workspace/groupitem.h \
include/workspace/groupitemsplitter.h \
include/workspace/workspacegroup.h \
include/workspace/workspaceviewattached.h \
include/workspace/workspace.h \
include/workspace/workspaceviewiteminfo.h \
include/workspace/workspacegrouplinknode.h
QSpinApplicationTests.pro:
TEMPLATE = subdirs
SUBDIRS += \
WorkspaceGroupTests
WorkspaceGroupTests.pro:
QT += testlib
QT -= gui
DEPENDPATH+=./../../QSpinApplication
include(./../../QSpinApplication/QSpinApplication.pri)
CONFIG += qt console warn_on depend_includepath testcase
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += tst_workspacegrouptests.cpp
不确定我是否理解得很好,但总的来说,我建议为 "lib" 创建一个单独的结构,在其中放置可以测试的逻辑代码,因此默认结构如下所示:
Structure:
├───app.pro
├───lib.pro
└───tests.pro
然后你输入你的 lib.pro:
TARGET = NameOfTarget
TEMPLATE = lib
CONFIG += staticlib
并添加您的 tests.pro,并在 app.pro 中添加:
LIBS += -L../lib -lNameOfTarget
最后应该可以毫无问题地包含在应用程序目录和测试中:
#include "anyHeaderFromLib.h"
.
我在搜索这个特定问题时发现了一些其他问题,但我无法让我的设置与我的单元测试项目一起工作。
project info: ( optional reading)
I am in the beginning of my final undergraduate project, where I am to create an IDE for the language Promula and the the verification tool Spin. The professor I am doing this with expects to use it in his classes and for future undergraduates to keep improving. It is also meant to be a open source project everyone can contribute to.
我的文件夹结构:
QSpin
-QSpin.pro
-QSpinApplication
--QSpinapplication.pro
--QSpinApplication.pri
--include
---Workspace
----*.h
--src
---Workspace
----*.cpp
-QSpinApplicationTests
--QSpinApplicationTests.pro
--WorkspaceGroupTests
---WorkspaceGroupTests.pro
----some cpp testfile
我的 QSpinApplication 编译和运行没有任何问题。导入我有的所以可以导入。
#include <Workspace/(file_name).h>
但是在我的测试项目 WorkspaceGroupTests 中,我想以同样的方式包含 headers,但我无法让它工作。除此之外,我假设测试项目需要知道 cpp 文件在哪里。如果我不使用任何应用程序 headers,测试项目将使用默认测试用例编译和运行。 目前我正在使用默认的影子构建,其根文件夹位于 QSpin 文件夹中。
Any idea of how i get my test project working correctly, to actual be able to test my application classes?
QSpin.pro:
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += \
QSpinApplication\QSpinApplication.pro \
QSpinApplicationTests
QSpinApplication.pro:
QT += quick qml gui
CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES +=src/main.cpp
include(QSpinApplication.pri)
RESOURCES += qml.qrc
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
QSpinApplication.pri:
#//DEPENDPATH += $$PWD
INCLUDEPATH += ./include
SOURCES +=src/workspace/workspaceview.cpp \
src/workspace/groupitem.cpp \
src/workspace/groupitemsplitter.cpp \
src/workspace/workspacegroup.cpp \
src/workspace/workspaceviewattached.cpp \
src/workspace/workspaceviewiteminfo.cpp \
src/workspace/workspacegrouplinknode.cpp
HEADERS += \
include/workspace/workspaceview.h \
include/workspace/groupitem.h \
include/workspace/groupitemsplitter.h \
include/workspace/workspacegroup.h \
include/workspace/workspaceviewattached.h \
include/workspace/workspace.h \
include/workspace/workspaceviewiteminfo.h \
include/workspace/workspacegrouplinknode.h
QSpinApplicationTests.pro:
TEMPLATE = subdirs
SUBDIRS += \
WorkspaceGroupTests
WorkspaceGroupTests.pro:
QT += testlib
QT -= gui
DEPENDPATH+=./../../QSpinApplication
include(./../../QSpinApplication/QSpinApplication.pri)
CONFIG += qt console warn_on depend_includepath testcase
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += tst_workspacegrouptests.cpp
不确定我是否理解得很好,但总的来说,我建议为 "lib" 创建一个单独的结构,在其中放置可以测试的逻辑代码,因此默认结构如下所示:
Structure:
├───app.pro
├───lib.pro
└───tests.pro
然后你输入你的 lib.pro:
TARGET = NameOfTarget
TEMPLATE = lib
CONFIG += staticlib
并添加您的 tests.pro,并在 app.pro 中添加:
LIBS += -L../lib -lNameOfTarget
最后应该可以毫无问题地包含在应用程序目录和测试中:
#include "anyHeaderFromLib.h"
.