QTcpClient 成功连接,但未连接到我的服务器。它在哪里连接?

2024-04-06

我已经使用 Qt 的 Tcp Sockets API 成功构建了一个瘦客户端/服务器。我知道它效果很好,因为我已经通过网络发送了大量数据并进行了验证。然而,我的项目经理想要一套单元测试,我正在使用 Qt 的测试库来实现它们。

无论如何,我试图设置一些虚拟服务器来简单地从 QTcpSocket 接收数据,以验证单元测试中的 sendData() 方法。当我连接测试套接字时,显示它已连接,但是用于连接虚拟服务器及其虚拟套接字的插槽从未被调用!

有人能看到我在这里做错了什么吗? (我已将代码精简为测试类中似乎损坏的部分)

来自 tst_tcpcommsocket.h

#ifndef TST_TCPCOMMSOCKET_H
#define TST_TCPCOMMSOCKET_H

#include <QtCore/QString>
#include <QtTest/QtTest>

#include <iostream>

#include <QTcpSocket>
#include <QTcpServer>

class TcpCommSocketTest : public QObject
{
    Q_OBJECT

private:
    QTcpSocket* qTestSocket;
    QTcpSocket* qDummySocket;
    QTcpServer* qDummyServer;

public:
        TcpCommSocketTest();

public slots:
    void connectDummyServer();

private Q_SLOTS:
    void initTestCase();    
    void sendDataTest();    
    void cleanupTestCase();
};

#endif // TST_TCPCOMMSOCKET_H

来自 tst_tcpcommsocket.cpp

#include "tst_tcpcommsocket.h"

void TcpCommSocketTest::connectDummyServer()
{
    cout << "connection attempt" << endl;
    qDummySocket = qDummyServer->nextPendingConnection();
}

void TcpCommSocketTest::initTestCase()
{
    qDummySocket = NULL;
    qDummyServer = new QTcpServer();
    qDummyServer->listen( QHostAddress("127.0.0.1"), 9000 );
    connect( qDummyServer, SIGNAL(newConnection()), SLOT(connectDummyServer()) );

    qTestSocket = new QTcpSocket();
    qTestSocket->connectToHost( QHostAddress("127.0.0.1"), 9000 );

    QVERIFY( qTestSocket->waitForConnected( 5000 ) );
    QVERIFY( qTestSocket->state() == QTcpSocket::ConnectedState );
}

void TcpCommSocketTest::sendDataTest()
{
    int i=0;
    QVERIFY( qDummySocket != NULL );
}

QTEST_MAIN(TcpCommSocketTest);

测试运行的输出:

********* Start testing of TcpCommSocketTest *********
Config: Using QTest library 4.7.3, Qt 4.7.3
PASS   : TcpCommSocketTest::initTestCase()
FAIL!  : TcpCommSocketTest::sendDataTest() 'qDummySocket != NULL' returned FALSE. ()
   Loc: [-]
cleanup
PASS   : TcpCommSocketTest::cleanupTestCase()
Totals: 2 passed, 1 failed, 0 skipped

While QTEST_MAIN创建一个 QApplication 并运行所有测试,它按顺序执行,而不是使用事件循环。因此,虽然您的套接字确实可以连接到服务器(意味着qTestSocket->waitForConnected()回报true),由于应用程序不会返回事件循环,QTcpServer的信号不会被发射,并且TcpCommSocketTest::connectDummyServer()永远不会被叫到。

尝试添加呼叫qApp->processEvents()在......的最后initTestCase()。应该让connectDummyServer()叫做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QTcpClient 成功连接,但未连接到我的服务器。它在哪里连接? 的相关文章

随机推荐