Как использовать Qtest для тестирования рабочего процесса конечного автомата QT

Я пытаюсь реализовать рабочий процесс на основе конечного автомата QT, и для целей тестирования я пытаюсь воспроизвести свой рабочий процесс с помощью QTest.

void initTestCase()
{    

    machine = loadScxmlFile("StateMachine.scxml");
    machine->start();

    auto wrapper = new Wrapper(machine);
    wrapper->connect();

    qDebug() << "machinestate" << wrapper->getmachineState();
    qDebug() << "activeStateBefore" << wrapper->getmachineState();
    wrapper->initialize();
    qDebug() << "activeStateAfter" << wrapper->getmachineState();
}

Но, к сожалению, даже если я правильно загружаю свой scxml, и даже если он выглядит запущенным и инициализированным, active_state всегда пуст.

Config: Using QtTest library 5.9.0, Qt 5.9.0 (x86_64-little_endian-llp64 shared (dynamic) release build; by MSVC 2015)
QDEBUG : TestXImagerMock::initTestCase() machinestate ()
QDEBUG : TestXImagerMock::initTestCase() activeStateBefore ()
QDEBUG : TestXImagerMock::initTestCase() activeStateAfter ()
PASS   : TestXImagerMock::initTestCase()

Когда я пытаюсь использовать правильное приложение QCoreApplication, все выглядит как шарм, поэтому кажется, что проблема связана с QTEST_MAIN.

QCoreApplication testapplication(argc, nullptr);
testapplication.exec();

дает

QDEBUG : TestXImagerMock::initTestCase() onEntry_NotInitialized
QDEBUG : TestXImagerMock::initTestCase() onEntry_NotInitialized
QDEBUG : TestXImagerMock::initTestCase() onEntry_Initializing

но эти журналы появляются после вызова testapplication.exec().

Нужно ли мне что-то добавить, чтобы иметь такое же поведение в QCoreApplication, созданном QTest?

Спасибо !


person Deswing    schedule 19.07.2017    source источник
comment
Возможный дубликат Как тестировать конечные автоматы Qts SCXML   -  person Kdawg    schedule 19.07.2017
comment
действительно, когда я вызываю QCoreApplication::processEvents(), событие обрабатывается. но это правильное решение?   -  person Deswing    schedule 19.07.2017
comment
Насколько я знаю, без запущенного цикла событий вы никогда не увидите, как конечный автомат проходит через его состояния, поэтому вам нужно будет сделать это или что-то подобное.   -  person Kdawg    schedule 19.07.2017