我正在尝试创建一个测试,使用QNetworkAccessManager与我们的RESTful API通信。我想做的就是使用QNetworkAccessManager获取一个简单的JSON对象。我的代码如下:
Connection::Connection(QString const &username, QString const &password, QString const &url, QString const &api) :
_user(username), _pass(password), _url(url) {
_manager = new QNetworkAccessManager(this);
QObject::connect(_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(receiveReply(QNetworkReply*)));
QNetworkRequest request;
request.setUrl(QUrl(_url.append(api)));
request.setRawHeader("Authorization", QString("Basic ").append(QString("%1:%2").arg(_user).arg(_pass)).toUtf8());
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/json");
QNetworkReply *reply = _manager->get(request);
}
void Connection::Connection(QNetworkReply *reply) {
//do some validation of the reply...
_data = QJsonDocument::fromJson(reply->readAll());
}
QJsonDocument Connection::data() const {
return _data;
}
...
#include <gtest/gtest.h>
#include "Connection.h"
#include <QApplication>
TEST(ConnectionTest, creation) {
int argc = 0;
char *argv = 0;
QApplication a(argc, &argv);
Connection *connect = new Connection("user","abc123", https://mytest.com/", "api/");
connect->deleteLater();
while (connect->data().isEmpty()) {
//loop forever
}
}
最初,我尝试将Connection作为QWidget进行测试。只有当我调用connection->show()时,finished信号才会显示。然后,我必须手动关闭小部件,测试才能完成。然而,这对于自动化单元测试并不是很有用。
如果我使用上述while循环等待_data被设置为某些内容,则QNetworkAccessManager永远不会发生任何事情,并且它会一直循环下去。
是否需要在向前移动之前进行某些调用?为什么-show()“有效”?