【问题标题】:Boost unit test Qt signalBoost单元测试Qt信号
【发布时间】:2014-11-13 18:29:08
【问题描述】:

使用Boost Unit Test框架对C++\Qt代码进行单元测试。

我们基本上使用 BOOST_FIXTURE_TEST_CASE 宏,如documentation 所示。对于每个测试,我们都会创建一个 QApplication 实例来设置事件循环并使测试代码能够使用信号和插槽。

现在我们需要测试是否发出信号。有没有人有这个问题的经验? BOOST_FIXTURE_TEST_CASE 生成的类不包含 Q_OBJECT 并且不是从 QObject 派生的,我猜这将是一个问题。感谢您对此问题的一些意见。

【问题讨论】:

    标签: boost-test qt5.3 boost-unit-test-framework


    【解决方案1】:

    我正在处理类似的问题,但使用的是 gtest 而不是 Boost Unit Test 框架。虽然我还没有答案,但我正在取得进展,这是我目前所知道的。

    首先,Qt 不喜欢在 main 之外生成 QApplication 或 QCoreApplication。此外,QApplication 适用于 Qt 的 GUI 类,而 QCoreApplication 可用于仅限控制台的类(例如我现在要测试的 QTcpSocket)。 GUI 的东西并不是真正可测试的,所以你要测试的任何东西都应该写到一个单独的类中。这将允许您在不处理 GUI 的情况下对代码进行单元测试,并且还允许您使用 QCoreApplication。

    下一步是使用 QThread 启动一个线程来承载您尝试测试的对象。 QThread 有自己的事件循环,可以通过调用它的 exec() 函数来运行。

    编写您的测试用例以从 QThread 中提取,您将拥有一个可用于信号和槽的事件循环,这应该可以更容易地确定是否发出了信号。如果没有事件循环,信号只会坐在那里什么都不做,因此无法测试它是否已发送!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多