Это запутанная ситуация, в которой я нахожусь. Во время тестирования переходов состояний для QStateMachine следующий код не может шпионить за сигналом, который вызывает переход.
// Test transition to SS_STARTING
QSignalSpy spy(test_obj_, SIGNAL(StateChanged(int)));
// emmit StateChanged signal
test_obj_->SetState(SS_STARTING);
// Current state property should be SS_STARTING
QVERIFY(spy.wait()); //<--- fails test
QVERIFY(test_obj_->GetCurrentState() == SS_STARTING);
QCOMPARE(spy.count(), 1);
следующий код проходит тест!
// Test transition to SS_STARTING
QSignalSpy spy(test_obj_, SIGNAL(StateChanged(int)));
// emmit StateChanged signal
test_obj_->SetState(SS_STARTING);
// Current state property should be SS_STARTING
QTest::qWait(20); //<--- passes test
QVERIFY(test_obj_->GetCurrentState() == SS_STARTING);
QCOMPARE(spy.count(), 1);
Я также могу внешне проверить, что сигнал излучается с помощью dbus-monitor.
Я могу пойти дальше и использовать QTest :: qWait, это не такбольшое дело, но я просто не понимаю, почему spy.wait не работает.
Ура, Саймон