我已經成功構建了一個使用Qt的Tcp套接字API的瘦客戶機/服務器。我知道它工作得很好,因爲我通過電線發送了大量數據並進行了驗證。但是,我的項目經理想要一套單元測試,並且正在使用Qt的測試庫來實現它們。QTcpClient成功連接,但不連接到我的服務器。它在哪裏連接?
無論如何,我試圖設置一些虛擬服務器來簡單地接收來自QTcpSocket的數據,以驗證單元測試中的sendData()方法。當我連接測試插座時,顯示它已連接,但連接虛擬服務器和虛擬插座的插槽永遠不會被調用!
任何人都可以看到我在做什麼錯在這裏? (我已經剝離的代碼down下來,只是,似乎在測試類斷裂的部分)
從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);
測試Run的輸出:
********* 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
非常感謝。這是正確的解決方案。我的單元測試現在完全可用。 – dusktreader