qt - 如何测试 Qt SCXML 状态机

标签 qt scxml

我正在尝试使用 Qt 测试框架验证状态机的行为。我根本不明白应该如何测试 Qt SCXML 实现。当然有QSignalSpy,但这仅适用于不需要事件循环运行的信号/slops。我本质上想做的是:

myStateMachine.submitEvent("MyEvent");
// Run event loop
// Check result

我尝试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();

可能与计时器结合使用,以在这些信号均未到达的情况下结束循环

关于qt - 如何测试 Qt SCXML 状态机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40677999/

相关文章:

qt - 程序意外结束

目标集的 SCXML 表示法

macos - CMake,OS X 包,递归复制目录到资源

c++ - QWebSocketServer - 不释放内存

c++ - FILE_NOTIFY_INFORMATION 不支持 Utf-8 文件名

java - scxml 中引发事件的问题

ios - SCXML解析IOS

python - PySide2 中 QScxmlStateMachine.connectToEvent 的奇怪行为

c++ - Qt 中是否有任何预定义函数可以将 QImage 对象保存到 JPG/PNG/BMP 文件?