Qt單元測試淺析


Qt單元測試框架,使用於基於Qt的應用程序和庫,先從一個簡單的demo工程說起吧。

我們可以通過QtCreator來創建一個簡單的Qt單元測試工程,夏天到了,這個demo工程的名字就叫Summer好了,創建過程中其它選項默認,完成后生成兩個文件:Summer.pro和tst_summertest.cpp,先來看一下這兩個文件。

Summer.pro——

 

[plain]  view plain  copy
 
  1. QT       += testlib  
  2. QT       -= gui  
  3. TARGET = tst_summertest  
  4. CONFIG   += console  
  5. CONFIG   -= app_bundle  
  6. TEMPLATE = app  
  7. SOURCES += tst_summertest.cpp  
  8. DEFINES += SRCDIR=\\\"$$PWD/\\\"  

 

Summer.pro文件中的QT+=testlib是必須的。

tst_summertest.cpp——

[cpp]  view plain  copy
 
  1. #include <QString>  
  2. #include <QtTest>  
  3.   
  4. class SummerTest : public QObject  
  5. {  
  6.     Q_OBJECT  
  7.   
  8. public:  
  9.     SummerTest();  
  10.   
  11. private Q_SLOTS:  
  12.     void testCase1();  
  13. };  
  14.   
  15. SummerTest::SummerTest()  
  16. {  
  17. }  
  18.   
  19. void SummerTest::testCase1()  
  20. {  
  21.     QVERIFY2(true, "Failure");  
  22. }  
  23.   
  24. QTEST_APPLESS_MAIN(SummerTest)  
  25.   
  26. #include "tst_summertest.moc"  

然后來編譯運行(使用QtCreator)一下,結果如下:

[plain]  view plain  copy
 
  1. ********* Start testing of SummerTest *********  
  2. Config: Using QtTest library 5.3.1, Qt 5.3.1  
  3. PASS : SummerTest::initTestCase()  
  4. PASS : SummerTest::testCase1()  
  5. PASS : SummerTest::cleanupTestCase()  
  6. Totals: 3 passed, 0 failed, 0 skipped  
  7. ********* Finished testing of SummerTest *********  

在Summer工程中,C++代碼里include了<QtTest>頭文件,文件結尾處include了對應的.moc文件,測試類SummerTest要繼承自QObject類或QObject的子類,需使用Q_OBJECT宏,測試方法testCase1()應標識為私有槽。

QTEST_APPLESS_MAIN(SummerTest)宏實際上是一個main()函數,其定義如下:

[cpp]  view plain  copy
 
  1. #define QTEST_APPLESS_MAIN(TestObject) \  
  2. int main(int argc, char *argv[]) \  
  3. { \  
  4.     TestObject tc; \  
  5.     return QTest::qExec(&tc, argc, argv); \  
  6. }  

看到了吧,非常簡單,先是實例化一個SummerTest對象,然后調用QTest::qExec(),執行私有槽標識的所有測試方法,這里是testCase1(),QTest是個namespace,留心上面的SummerTest工程運行結果的話,會發現多了兩個東東,initTestCase()和cleanupTestCase(),它們是測試框架自帶的,即使不顯式定義也會被調用,有點像C++的默認構造函數,前者在第一個測試方法執行前被調用,后者在最后一個測試方法執行后被調用,測試框架還提供了init()和cleanup(),它們分別在每一個測試方法執行的前后被調用,不顯式定義時是不會執行的。除了QTEST_APPLESS_MAIN()外,測試框架還提供了兩個類似的宏,QTEST_MAIN()和QTEST_GUILESS_MAIN(),用法相同。

Summer工程的編譯運行也可以通過命令行來完成,有時候效果更好。

1、$qmake Summer.pro

使用qmake命令編譯Summer.pro,生成MakeFile文件。

2、$make

使用make命令編譯MakeFile,生成tst_summertest可執行文件,為什么可執行文件是tst_summertest而不是別的什么呢,這是因為在Summer.pro文件中指定了TARGET=tst_summertest,當然也可以設置成其它值。

3、$./tst_summertest

執行st_summertest,log輸出到了終端,那么log可以輸出到指定文件嗎,答案是可以的,命令格式如下:

$./tst_summertest -o output_path

這時,log輸出到了output_path指定的文件中,終端上不再顯示log

 

http://blog.csdn.net/ieearth/article/details/44964437


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM