2012-08-03 27 views
10

也許我錯過了一些東西,但對我來說,爲QtTest框架提供的唯一教程讓你測試QString類似乎很愚蠢。QtTest單元測試,如何添加位於另一個項目中的頭文件?

單元測試的典型用例是......測試自己編寫的類,但沒有提及如何在教程中引用不同項目中的類以用於測試,並且Google也失敗了(我真的懷疑複製粘貼類是一個很好的方法來做到這一點)。

我甚至翻閱了3本不同的Qt書,沒有提及QtTest。

+0

右鍵單擊QtCreator中的項目,並執行「添加現有文件」沒有幫助嗎? – 2012-08-03 22:32:07

+0

在嘗試#include時沒有找到這些文件,而且它已經被添加到.pro中的HEADERS中了。 – 2012-08-03 22:40:00

+0

@JohnLotacs HEADERS用於當前項目的頭文件。要包含第三方來源等,請參閱下面的答案。 – AJG85 2012-08-03 23:29:22

回答

6

您可以添加在您的.pro文件路徑等項目目錄,如下所示:

INCLUDEPATH += <directory> 

那麼它應該是能夠找到要包括的頭。

編輯:基於評論

這完全是另一回事了。未定義的引用通常意味着您缺少依賴關係。這通常可以通過兩件事之一來解決。

最簡單的是包括缺少的源文件:

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

也許是更好的解決方案是通過編譯它作爲一個庫,並鏈接到它暴露可重用的代碼。例如。 Windows上的.DLL或.LIB以及Li​​nux上的.SO或.A。

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

你能告訴我們你正在得到的具體錯誤嗎?

+0

儘管Qt Creator能夠自動完成這些功能(意味着它正在查找標題),但是我的所有函數對包含文件的函數調用都會導致「undefined reference to ******」錯誤 – 2012-08-06 14:08:56

+0

@JohnLotacs請參閱上面編輯,這是一個不同的問題。 – AJG85 2012-08-06 16:39:19

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 

單元測試。親:

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

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

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