我正在尝试使用 Qt 测试框架验证状态机的行为。我只是不明白我应该如何测试 Qt SCXML 实现。当然有QSignalSpy,但这仅适用于不需要事件循环运行的信号/斜率。我本质上想做的是:
myStateMachine.submitEvent("MyEvent");
// Run event loop
// Check result
Run Code Online (Sandbox Code Playgroud)
我尝试QCoreApplication::processEvents()这样做有时会奏效,但有时在调用processEvents(). 我想我可能会触发一个无限循环。谷歌搜索也没有帮助,但必须有一种方法可以正确地做到这一点。
在基于 QtTest 的测试中,您可以使用QTest::qWait()给定时间运行事件循环。
您还可以使用QSignalSpy等待特定时间内发生的信号,请参阅QSignalSpy::wait()
如果有多个信号可以触发测试继续,您还可以使用嵌套事件循环,例如这样的
QEventLoop loop;
connect(sender1, SIGNAL(signal1()), &loop, SLOT(quit()));
connect(sender2, SIGNAL(signal2()), &loop, SLOT(quit()));
loop.exec();
Run Code Online (Sandbox Code Playgroud)
可能与计时器结合使用,以在这些信号均未到达的情况下结束循环
| 归档时间: |
|
| 查看次数: |
683 次 |
| 最近记录: |