Я начал экспериментировать с модульным тестированием в Qt и хотел бы услышать комментарии к сценарию, который включает в себя модули и тестовые сигналы.
Вот пример:
Код, который я хотел бы проверить, (m_socket - указатель на QTcpSocket
):
void CommunicationProtocol::connectToCamera()
{
m_socket->connectToHost(m_cameraIp,m_port);
}
Поскольку это асинхронный вызов, я не могу проверить возвращаемое значение. Тем не менее, я хотел бы проверить, действительно ли испускается сигнал ответа, который сокет испускает при успешном соединении (void connected ()
).
Я написал тест ниже:
void CommunicationProtocolTest::testConnectToCammera()
{
QSignalSpy spy(communicationProtocol->m_socket, SIGNAL(connected()));
communicationProtocol->connectToCamera();
QTest::qWait(250);
QCOMPARE(spy.count(), 1);
}
Моя мотивация была, если ответ не произошел в 250 мс, что-то не так.
Однако сигнал никогда не попадает, и я не могу сказать точно, если он даже испустил. Но я заметил, что я не начинаю цикл событий нигде в тестовом проекте. В проекте разработки цикл событий запускается в основном с помощью QCoreApplication::exec()
.
Подводя итог, при модульном тестировании класса, который зависит от сигналов и слотов, где следует
QCoreApplication a(argc, argv);
return a.exec();
запускается в тестовой среде?