我正在Qt Creator中開發一個GUI應用程序,並且想爲它編寫一些單元測試。如何從QtCreator運行qtestlib單元測試
我跟着This guide使用QtTestlib進行一些單元測試,程序編譯得很好。 但我如何運行它們?我希望它們在GUI應用程序啓動之前運行,如果調試buid並且在發佈版本時不運行。
我正在Qt Creator中開發一個GUI應用程序,並且想爲它編寫一些單元測試。如何從QtCreator運行qtestlib單元測試
我跟着This guide使用QtTestlib進行一些單元測試,程序編譯得很好。 但我如何運行它們?我希望它們在GUI應用程序啓動之前運行,如果調試buid並且在發佈版本時不運行。
終於想出瞭如何在啓動應用程序之前運行測試。
我添加在測試中類中的一個靜態方法來運行測試:
#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();
}
試驗結果印在應用輸出窗口。
Qt創建者目前還沒有明確支持運行單元測試(直到Qt Creator 2.0beta)。所以暫時你需要手動開始測試。
如果您使用的是像cmake這樣的構建系統而不是qmake,那麼您可以嘗試自動運行單元測試作爲構建過程本身的一部分。不幸的是,我不知道任何方法與qmake做到這一點。 CMake由Qt創建者支持,儘管不如qmake。
就我個人而言,我發現cmake的支持是相當不錯的。我甚至使用CTEST通過Creator批量運行我的QTEST單元測試課程。在自定義生成配置中。 – jkyle 2011-04-14 21:30:23
請勿將測試代碼放入您的主項目中。你應該爲你的單元測試創建一個單獨的項目,然後構建並運行它。不要修改您的主項目來運行測試。
理想情況下,您應該建立一個構建服務器,它將自動調用您的單元測試項目並構建您的發佈。你可以編寫腳本。
永遠不要破解你的主應用程序來運行你的單元測試。如果您需要進行集成級別測試(即測試程序在完全編譯和集成後的工作方式),則應該使用不同的集成測試框架,以允許您從外部腳本源測試程序。 FrogLogic's Squish就是這樣一個框架。
嗨,詹姆斯。比方說,我有一個應用程序與一串menulist項目。點擊時每個菜單項顯示一個表單。如何進行單元測試,點擊菜單列表中的每個項目並檢查是否顯示正確的表單? – Owen 2010-11-17 03:16:45
你不能爲此做單元測試。你需要像FrogLogic的Squish這樣的集成測試。單元測試比UI測試要低得多。至少這是我理解它的工作方式。如果你發現你可以做這種我想知道的東西,但是我讀的所有東西都說這是對單元測試的濫用。 – 2010-11-19 02:15:00
中使用多個目標和預處理標誌來實現這一目標:
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
這樣測試包含在測試目標中,但不包含調試或發佈目標。
你不想用測試代碼污染你的應用程序主體。 – jkyle 2011-04-14 21:28:21