2011-07-05 42 views
0

我的單元測試項目中存在依賴關係問題。QTestLib:測試目標的問題= app

我的項目結構如下:

MyProject 
    |---MyProject.pro 
    |---src 
    |  |---src.pro 
    |  |---ClassA.h 
    |  |---ClassA.cpp  
    |  |---ClassB.h 
    |  |---ClassB.cpp 
    | 
    |---tests 
     |--tests.pro 
     |--testClassA.cpp 

MyProject.pro:

TEMPLATE = subdirs 
SUBDIRS = src tests 

src.pro:

TEMPLATE = app 
TARGET = someApp 
HEADERS += classA.h classB.h 
SOURCES += classA.cpp classB.cpp 

比方說ClassA的調用ClassB的在ClassA.cpp:

void ClassA::someFunctionInClassA() 
{ 
    ClassB b; 
} 

現在我想單元測試ClassA。我找到了兩種方法來做到這一點。 第一個是將src-Subproject轉換爲一個庫(在src.pro中的TARGET = lib)。然後我下面的行添加到tests.pro及其所有罰款:

LIBS += ../libSrc.so 

第二個是名在test.pro使用ClassA的所有文件。這意味着,我的tests.pro樣子:

TARGET = testclassA 
TEMPLATE = app 
/*...*/ 
HEADERS += ../src/ClassA.h \ 
      ../src/ClassB.h 
SOURCES += testClassA.cpp \ 
      ../src/ClassA.cpp \ 
      ../src/ClassB.cpp 

我不能使用第一個解決方案(在src項目轉換成一個lib),所以我必須使用第二個。即使我只想測試其中的一個,是否真的有必要命名所有的源代碼/頭文件? 謝謝您的建議!

+0

我沒有得到* I不能使用第一個解決方案* ...但對於你的問題,如果'ClassA' *實際*實例'ClassB'所以是的,你將不得不在你的測試可執行文件中編譯'ClassB.cpp',否則你將得到一個'未定義的引用'... – vrince

回答

0

我不能使用第一個解決方案,這意味着我不能改變太多的源代碼。什麼是TARGET =應用程序,現在必須保持一個應用程序。我唯一的任務是爲項目添加單元測試。 我發現了一個解決方法,不明確地命名所有類: 在tests.pro:

SOURCES += $$files(../pathToCppDir/*.cpp) 
HEADERS += $$files(../pathToHppDir/*.h) 
SOURCES -= ../pathToCppDir/main.cpp   // excluding second main(){}