2011-11-24 121 views
1

結合單元測試和圖形輸出我想使用Boost測試框架,我還需要一個QApplication的可視化,因爲我的一些測試是非常清晰可見。 因此,我需要調用的QApplication EXEC()的最後一件事,在我的主要和高管應該是,只要不關閉的窗口中運行。使用QT

我嘗試下面的代碼,但它不按預期(無窗)的工作,並且需要人工測試登記。

test_suite* 
init_unit_test_suite(int argc, char* argv[]) { 
    QApplication app(argc, argv); 
    MainWidget widget(0); 

    test_suite* test= BOOST_TEST_SUITE("Test case template example"); 
    test->add(BOOST_TEST_CASE(&free_test_function2); 
    //... many more tests 

    widget.show(); 
    app.exec(); 
    return test; 
} 

如何將BOOST_TEST與sth.like QApplication一起使用? 自動測試註冊也有可能嗎?

非常感謝,馬丁

回答

1

你可能會考慮定義BOOST_TEST_NO_MAIN和編寫自己的主要功能,在適當的時候調用

::boost::unit_test::unit_test_main(&init_unit_test, argc, argv); 

。我懷疑這需要在一個子線程中完成,因爲Qt很可能會在exec()內部循環,直到所有窗口關閉。

+0

真它循環。我希望沒有線程引入的方法,因爲然後每個測試例程中的繪圖事件都需要進行線程間通信。這絕對是BOOSTs測試框架在這種情況下效用的終結。 – Martin

+0

@Martin:您可以爲每個測試啓動Qt事件處理例程,也可以從Qt內部啓動單元測試main。 – thiton

+0

再次感謝您指引我朝着正確的方向 - >讚美歸於你;-) – Martin

1

我終於得到它得益於thitons評論和大量的谷歌搜索。下面是該記錄(使用boost 1_44和動態測試庫)的代碼:在測試文件

//Testing the lib 

//################################################################################### 
//Setting up boost testing framework 
#define BOOST_TEST_NO_MAIN 
#define BOOST_TEST_DYN_LINK 
#define BOOST_TEST_MODULE "Unit test for libcommon" 

#include <boost/test/unit_test.hpp> //################################################################################### 

#include <QApplication> 
#include <QtGui> 

using namespace boost::unit_test; 

int main(int argc, char *argv[]) { 
    (void) argc; 
    (void) argv; 

    QApplication app(argc, argv); 
    QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8")); 

    ::boost::unit_test::unit_test_main(&init_unit_test, argc, argv); 

    return app.exec(); 
} 

從這點可以添加自動測試並創建QWidgets和任何這些測試的內部人。 QWidgets可以例如在燈具被實例化,但顯然他們不能在燈具被破壞,如果破壞視覺形象感興趣(一個顯然不會看到任何東西,因爲一個固定的拆解是該套件中的所有測試後立即調用)