2016-11-18 8 views
4

Qtテストフレームワークを使用して状態マシンの動作を検証しようとしています。 Qt SCXMLの実装をどのようにテストするのか分かりません。確かにQSignalSpyがありますが、これはイベントループを実行する必要のない信号/スロープのみです。私は基本的にやりたいことはある:Qt SCXML状態マシンをテストする方法

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

は、私は、これは時々働いQCoreApplication::processEvents()しようとしたが、processEvents()を呼び出すときに、時にはも捕まってしまいました。私は無限ループを引き起こすかもしれないと思う。また、グーグルは助けにはなりませんでしたが、適切にこれを行う方法が必要です。

答えて

3

QtTestベースのテストでは、QTest::qWait()を使用して、所定の時間イベントループを実行できます。

あなたはまた、例えば、テストの継続をトリガすることができ、複数の信号がある場合、あなたはまた、ネストされたイベントループを使用することができます QSignalSpy::wait()

を参照して、一定の時間内で発生する信号を待つQSignalSpyを使用することができます

潜在的にそれらの信号の場合なしのループを終了するタイマーと組み合わせて、この

QEventLoop loop; 
connect(sender1, SIGNAL(signal1()), &loop, SLOT(quit())); 
connect(sender2, SIGNAL(signal2()), &loop, SLOT(quit())); 
loop.exec(); 

のようなものは、私たちは同じ問題を持っていて、私達はQScxmlStateMachine::reachedStableState信号を利用した

0

に到着。

// 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 
関連する問題