升压单元测试Qt信号

时间:2014-11-13 18:29:09

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

将您的测试用例写入QThread,您将拥有一个可用于信号和插槽的事件循环,这样可以更容易地确定是否发出了信号。没有事件循环,信号将只是坐在那里什么也不做,所以没有办法测试它是否被发送!