使用QT组合单元测试和图形输出

时间:2011-11-24 15:54:21

标签: unit-testing qt boost

我想使用BOOST测试框架,我还需要一个QApplication进行可视化,因为我的一些测试非常清晰可视化。 因此,我需要在我的main中调用QApplication exec()作为最后一件事,只要窗口没有关闭,exec就应该运行。

我尝试了以下代码,但它没有按预期工作(没有窗口),需要手动测试注册。

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一起使用? 是否也可以进行自动测试注册?

非常感谢,马丁

2 个答案:

答案 0 :(得分:1)

您可以考虑定义BOOST_TEST_NO_MAIN并编写自己的主函数,该函数调用

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

在适当的时候。我怀疑这需要在子线程中完成,因为Qt很可能会在exec()内循环,直到所有窗口都关闭。

答案 1 :(得分: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可以例如在灯具中实例化但显然如果感兴趣的是视觉图像,它们一定不能在灯具破坏时被破坏(显然不会看到任何东西,因为在该套件的所有测试之后立即调用灯具的拆除)