2011-11-24 73 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可以例如在灯具被实例化,但显然他们不能在灯具被破坏,如果破坏视觉形象感兴趣(一个显然不会看到任何东西,因为一个固定的拆解是该套件中的所有测试后立即调用)