2010-05-11 70 views
5

我正在Qt Creator中開發一個GUI應用程序,並且想爲它編寫一些單元測試。如何從QtCreator運行qtestlib單元測試

我跟着This guide使用QtTestlib進行一些單元測試,程序編譯得很好。 但我如何運行它們?我希望它們在GUI應用程序啓動之前運行,如果調試buid並且在發佈版本時不運行。

回答

4

終於想出瞭如何在啓動應用程序之前運行測試。

我添加在測試中類中的一個靜態方法來運行測試:

#include <QtTest/QtTest> 

TestClass::runTests() 
{ 
    TestClass * test = new TestClass(); 

    QTest::qExec(test); 
    delete test; 
} 

在主函數,執行:

int main(int argv, char *args[]) 
{ 
    ::TestsClas::runTests(); 

    QApplication app(argv, args); 
    MainWindow mainWindow; 
    mainWindow.setGeometry(100, 100, 800, 500); 
    mainWindow.show(); 

    return app.exec(); 
} 

試驗結果印在應用輸出窗口。

+7

你不想用測試代碼污染你的應用程序主體。 – jkyle 2011-04-14 21:28:21

2

Qt創建者目前還沒有明確支持運行單元測試(直到Qt Creator 2.0beta)。所以暫時你需要手動開始測試。

如果您使用的是像cmake這樣的構建系統而不是qmake,那麼您可以嘗試自動運行單元測試作爲構建過程本身的一部分。不幸的是,我不知道任何方法與qmake做到這一點。 CMake由Qt創建者支持,儘管不如qmake。

+0

就我個人而言,我發現cmake的支持是相當不錯的。我甚至使用CTEST通過Creator批量運行我的QTEST單元測試課程。在自定義生成配置中。 – jkyle 2011-04-14 21:30:23

18

請勿將測試代碼放入您的主項目中。你應該爲你的單元測試創​​建一個單獨的項目,然後構建並運行它。不要修改您的主項目來運行測試。

理想情況下,您應該建立一個構建服務器,它將自動調用您的單元測試項目並構建您的發佈。你可以編寫腳本。

永遠不要破解你的主應用程序來運行你的單元測試。如果您需要進行集成級別測試(即測試程序在完全編譯和集成後的工作方式),則應該使用不同的集成測試框架,以允許您從外部腳本源測試程序。 FrogLogic's Squish就是這樣一個框架。

+0

嗨,詹姆斯。比方說,我有一個應用程序與一串menulist項目。點擊時每個菜單項顯示一個表單。如何進行單元測試,點擊菜單列表中的每個項目並檢查是否顯示正確的表單? – Owen 2010-11-17 03:16:45

+3

你不能爲此做單元測試。你需要像FrogLogic的Squish這樣的集成測試。單元測試比UI測試要低得多。至少這是我理解它的工作方式。如果你發現你可以做這種我想知道的東西,但是我讀的所有東西都說這是對單元測試的濫用。 – 2010-11-19 02:15:00

5

中使用多個目標和預處理標誌來實現這一目標:

int main(int argv, char *args[]) 
{ 
#ifdef TEST 
    ::TestsClas::runTests(); 
#endif 
    QApplication app(argv, args); 
    MainWindow mainWindow; 
    mainWindow.setGeometry(100, 100, 800, 500); 
    mainWindow.show(); 

    return app.exec(); 
} 

然後進入項目窗格,通過複製「調試」添加新目標「測試」。在構建步驟下,添加一個自變量參數,即

CXXFLAGS+=-DTEST 

這樣測試包含在測試目標中,但不包含調試或發佈目標。