您的单元测试将需要编译您想要单元测试的项目中的类。因此,您需要在两个项目中添加包含(否则测试项目将不知道您要测试的类)。并且链接器也需要链接到项目的代码,因为您的测试将使用这些类。
一种方法是在测试项目中添加要测试的类,并在编译单元测试项目时再次编译它们,但这很乏味而且不是很方便,因为每次要添加类时,都需要添加将它添加到两个 .pro 文件中(提示,您可以在 .pro 文件中使用通配符,例如 *.cpp 将文件夹中的所有源文件添加到项目中)。
我认为更好的方法是将要测试的项目设置为静态库,将其与应用程序分开:您有另一个项目是应用程序,仅包含main.cpp
到该静态库的链接。
这是包含项目的文件夹的表示:
Project.pro #subdir project
UIProject/ #static lib
UIProject.pro
#all your classes here
MainProject/ #application
MainProject.pro
main.cpp
UITestProject/ #unit tests of UIProject (linking to it)
UITestProject.pro
#all your UI test classes here
项目.pro:
TEMPLATE = subdirs
SUBDIRS += UIProject
SUBDIRS += MainProject
SUBDIRS += UITestProject
UIProject.pro:
# project type
TEMPLATE = lib
# library type
CONFIG += staticlib
HEADERS += *.h
SOURCES += *.cpp
MainProject.pro:
#[...]
TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH += ../UIProject/
DEPENDPATH += $${INCLUDEPATH} # force rebuild if the headers change
# link against UILib
_UI_LIB = ../UIProject/
CONFIG(debug, debug|release) {
win32: _UI_LIB = $$join(_UI_LIB,,,debug/UIProject.lib)
} else {
win32: _UI_LIB = $$join(_UI_LIB,,,release/UIProject.lib)
}
LIBS += $${_UI_LIB}
PRE_TARGETDEPS += $${_UI_LIB}
UITestProject.pro:
#[...]
TEMPLATE = app
HEADERS += *.h
SOURCES += *.cpp
INCLUDEPATH += ../UIProject/
DEPENDPATH += $${INCLUDEPATH} # force rebuild if the headers change
# link against UILib
_UI_LIB = ../UIProject/
CONFIG(debug, debug|release) {
win32: _UI_LIB = $$join(_UI_LIB,,,debug/UIProject.lib)
} else {
win32: _UI_LIB = $$join(_UI_LIB,,,release/UIProject.lib)
}
LIBS += $${_UI_LIB}
PRE_TARGETDEPS += $${_UI_LIB}
您必须对其进行编辑以匹配您的项目,但主要内容在这里。它应该可以工作,因为我从我的一个项目中复制了它,前提是我没有添加任何错误。