- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想测试对网络服务器的异步请求。为此,我正在创建一个简单的单元测试来快速尝试几行代码:
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 和一个在 nam->get(req) 之后的 loop.exec();请求被执行。
有什么提示吗?我必须在我的每个单元测试中使用 loop.exec() 吗?
最佳答案
如果你想测试异步行为,你必须使用 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));
}
您的测试还有其他问题:
关于QteSTLib:未执行 QNetworkRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2629055/
我在 QNetworkRequest 的文档中找到了 QNetworkRequest::User 和 QNetworkRequest::UserMax ,但根据找到的解释,我无法理解每一个的含义。 每
我正在使用 Qt 与 GraphQL 主机交互。我正在使用 QNetworkRequest,登录过程完成得很好,给了我一个 JSON 格式的 token。从那时起,GraphQL 期望 token 位
我想测试对网络服务器的异步请求。为此,我正在创建一个简单的单元测试来快速尝试几行代码: void AsynchronousCall::testGet() { QNetworkAccessMan
我试图获取网页的内容,所以我解析了所有的 div 并创建了一个文本文件,这里是我的起始代码, #include #include #include
我有一个 Qt 应用程序,我在 Windows 7 x64 SP1 下使用 Qt 4.8.1 进行部署,但使用 32 位编译。该应用程序使用 QNetworkAccessManager、QNetwor
我必须使用 post 到 google 脚本(见下文),我希望在脚本的末尾收到反馈,表明一切正常。 function doPost(e){ var idm = e.parameter.idm;
有什么方法可以在客户端调用 QNetworkAccessManager::post(QNetworkRequest,QByteArray) 期间(或之后)查看将发送(或已经发送)的数据? 换句话说,我
如何阻止 QNetworkRequest 在 put/post 到 HTTPS 连接期间缓冲 QIODevice 的全部内容?发布到 HTTP 时它工作正常,但 HTTPS 导致在发布开始之前将整个文
我有一段在 4.8 中工作的代码,但现在我需要将它移植到 Qt5 (beta2) 这是应该发生的事情: 我想将一些数据发布到网络服务器,网址应如下所示“http://server/actions.ph
我可以在 C# 中轻松获得异步设计 HttpResponseMessage response = await httpClient.GetAsync(InputAddress.Text); {
我需要在 QNetworkRequest 中附加多个 header 请求。我怎样才能做到这一点? 例如下面是我的 URL 和所需的 header : www.abc.com?identifier=13
我正在使用以下代码向服务器发出 HTTPS 请求。 QNetworkRequest request; //request.setSslConfiguration(QSslConfiguration::
我需要与需要本地证书(.crt 文件)的服务器交换数据。我试试这个: loginRequest = QNetworkRequest(QUrl("https://somesite.com/login")
我想用 Qt 构建自定义 SOAP-Request。对于我的特定 SOAP 操作数据包,我需要删除自动出现在 QNetworkrequest 中的 Accept-Language header 。 拥
我的 Qt 小部件应用程序中有一个 QWebView 组件。我已经创建了一个网络管理器来处理来自 QWebView 的请求。 我想做的是在 QWebView 中捕获网络表单的值,到目前为止,我有每个网
我有一个 QWebView,我创建了一个 QNetworkDiskCache 并设置了它。现在我想确保所有 QNetworkRequests 总是使用 PreferCache 而不是 PreferNe
我一直在努力使 Twitter API 的应用程序唯一身份验证在 Qt 上工作。当我运行我的代码时,出现此错误: Failure "Error transferring https://api.twi
我正在使用以下函数发出发布请求: bool NewAccountDialog::verifyAccount() { QString loginURL = "https://accounts.c
我最近开始了对大约 2 个月前编写的大型单片音频播放器应用程序进行模块化的繁琐过程。 这个过程进行得相当顺利,尽管其中一种方法(ScrobbleMedia - 可以预见的是它会发出 HTTP 请求以将
我正在尝试连接到 gmail 并使用 atom 文件。我对包含 !#$%^&* 字符的密码有疑问。 pNetworkManager = new QNetworkAccessManager(th
我是一名优秀的程序员,十分优秀!