Je souhaite tester une requête asynchrone sur un serveur Web. A cette fin, je suis en train de créer simple unittest pour essayer rapidement quelques lignes de code:Qtestlib: QNetworkRequest non exécuté
void AsynchronousCall::testGet()
{
QNetworkAccessManager *nam = new QNetworkAccessManager(this);
QUrl url("http://myownhttpserver.org");
QNetworkRequest req(url);
this->connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(reqFinished(QNetworkReply *)));
QNetworkReply *rep = nam->get(req);
}
void AsynchronousCall::reqFinished(QNetworkReply *rep)
{
qDebug() << rep->readAll();
qDebug() << "finshed";
}
Le problème est que reqFinished() est jamais atteint. Si j'avais un QEventLoop simple et un loop.exec() juste après le nam-> get (req); la requête est exécutée.
Un conseil? Dois-je utiliser un loop.exec() dans mes unittests?
Les tests unitaires sont bons pour tester les services de réseau, mais peut se demander si QTest est le moyen de tester quelque chose d'extérieur est la voie à suivre ... – Smar
Il se avère que KDE a une fonction QTest :: kWaitForSignal, qui fait la exactement la même chose. –