Я успешно построил тонкий клиент / сервер, используя 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