Qtestlib:QNetworkRequest不执行
-
26-09-2019 - |
题
我想测试一步请求网络服务器。为此目的,我是创建一种简单的单元测试快速尝试一些代码行:
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()之后不结盟运动->获得(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