Qtestlib:QNetworkRequest実行されません
-
26-09-2019 - |
質問
私は試験中に非同期要求をウェブサーバ.そのため私を簡単にunittestを早く数行のコード:
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";
}
問題はreqFinished()がいます。また簡単なQEventLoopと、ループを実行します。exec()の直後には、ナム->get(req);の請求が実行されます。
他のヒント?を使用しなければいけない、ループを実行します。exec()は私の毎unittests?
解決
したい場合は試験の非同期行動に使QEventLoopまたはその他のクラスと同様の機能。ていただきたい書ヘルパーの方法のようになります:
bool waitForSignal(QObject *sender, const char *signal, int timeout = 1000) {
QEventLoop loop;
QTimer timer;
timer.setInterval(timeout);
timer.setSingleShot(true);
loop.connect(sender, signal, SLOT(quit()));
loop.connect(&timer, SIGNAL(timeout()), SLOT(quit()));
timer.start();
loop.exec();
return timer.isActive();
}
を利用することができますユニットテストのようになります:
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);
QVERIFY(waitForSignal(nam, SIGNAL(finished(QNetworkReply*)), 5000));
}
その他にも課題は、試験:
所属していません StackOverflow