使用 Boost Unit Test 框架对 C++\Qt 代码执行单元测试。
我们基本上使用 BOOST_FIXTURE_TEST_CASE 宏,如文档中所示。对于每个测试,我们创建一个 QApplication 实例来设置事件循环并使测试代码能够使用信号和插槽。
现在我们需要测试是否发出信号。有没有人有这个问题的经验?BOOST_FIXTURE_TEST_CASE 生成的类不包含 Q_OBJECT 并且不是从 QObject 派生的,我猜这将是一个问题。感谢有关此问题的一些意见。
使用 Boost Unit Test 框架对 C++\Qt 代码执行单元测试。
我们基本上使用 BOOST_FIXTURE_TEST_CASE 宏,如文档中所示。对于每个测试,我们创建一个 QApplication 实例来设置事件循环并使测试代码能够使用信号和插槽。
现在我们需要测试是否发出信号。有没有人有这个问题的经验?BOOST_FIXTURE_TEST_CASE 生成的类不包含 Q_OBJECT 并且不是从 QObject 派生的,我猜这将是一个问题。感谢有关此问题的一些意见。
我正在处理类似的问题,但使用的是 gtest 而不是 Boost Unit Test 框架。虽然我还没有答案,但我正在取得进展,这是我目前所知道的。
首先,当 QApplication 或 QCoreApplication 在 main 之外生成时,Qt 不喜欢它。此外,QApplication 适用于 Qt 的 GUI 类,而 QCoreApplication 可用于仅控制台类(例如我现在要测试的 QTcpSocket)。GUI 的东西并不是真正可测试的,所以你要测试的任何东西都应该写到一个单独的类中。这将允许您在不处理 GUI 的情况下对代码进行单元测试,并且还允许您使用 QCoreApplication。
下一步是使用 QThread 启动一个线程,该线程承载您要测试的对象。QThread 有自己的事件循环,可以通过调用它的 exec() 函数来运行。
编写测试用例以从 QThread 中提取,您将拥有一个可用于信号和插槽的事件循环,这将使确定是否发出信号变得更加容易。如果没有事件循环,信号只会坐在那里什么都不做,所以没有办法测试它是否被发送!