首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qtestlib:未执行QNetworkRequest

Qtestlib:未执行QNetworkRequest
EN

Stack Overflow用户
提问于 2010-04-13 19:24:49
回答 1查看 2.5K关注 0票数 2

我想测试对test服务器的异步请求。为此,我创建了一个简单的单元测试来快速尝试几行代码:

代码语言:javascript
复制
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和和一个loop.exec(),紧跟在nam->get(Req)之后;请求就会被执行。

有什么提示吗?我必须在我的每个单元测试中使用loop.exec()吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-13 22:02:40

如果要测试异步行为,则必须使用QEventLoop或其他具有类似功能类。我建议您像这样编写helper方法:

代码语言:javascript
复制
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();
}

然后您可以在您的单元测试中使用它,如下所示:

代码语言:javascript
复制
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));
}

您的测试还存在其他问题:

依赖于网络连接的

  1. 测试不应该是单元测试。你想要你的单元测试非常快,这在网络上是不可能实现的。connections.
  2. Your测试并没有真正测试任何东西:它只是把一些信息放到调试控制台上。你应该定义期望并使用QVERIFY和QCOMPARE宏来验证它们。
  3. QTest很糟糕。如果您要从头开始创建测试库,请改为使用gtest + gmock
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2629055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档