首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试Qt SCXML状态机

如何测试Qt SCXML状态机
EN

Stack Overflow用户
提问于 2016-11-18 21:11:28
回答 2查看 696关注 0票数 5

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

代码语言:javascript
复制
myStateMachine.submitEvent("MyEvent");
// Run event loop
// Check result

我试图QCoreApplication::processEvents()这有时有效,但有时在调用processEvents()时也卡住了。我想我可能触发了一个无限循环。同样,谷歌搜索也没有帮助,但必须有一种方法来做这件事。

EN

回答 2

Stack Overflow用户

发布于 2016-11-19 20:01:01

在基于QtTest的测试中,您可以使用QTest::qWait()在给定时间内运行事件循环。

您还可以使用QSignalSpy等待信号在特定时间内发生,请参见QSignalSpy::wait()

如果有多个信号可以触发测试继续,您还可以使用嵌套事件循环,例如,如下所示

代码语言:javascript
复制
QEventLoop loop;
connect(sender1, SIGNAL(signal1()), &loop, SLOT(quit()));
connect(sender2, SIGNAL(signal2()), &loop, SLOT(quit()));
loop.exec();

可能与计时器相结合,以便在这些信号都没有到达的情况下结束循环

票数 3
EN

Stack Overflow用户

发布于 2017-08-24 16:46:20

我们也有同样的问题,我们利用了QScxmlStateMachine::reachedStableState信号。

代码语言:javascript
复制
// We declared a QTestEventLoop as m_eventLoop
connect(stateMachine, &QScxmlStateMachine::reachedStableState, 
        &m_eventLoop, &QTestEventLoop::exitLoop);

stateMachine->submitEvent("MyEvent");
m_eventLoop.enterLoopMSecs(3000);
// check the state, results etc
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40677999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档