Qt の Tcp Sockets API を使用して、シン クライアント/サーバーを正常に構築しました。大量のデータをネットワーク経由で送信して検証したので、非常にうまく機能することはわかっています。しかし、私のプロジェクト マネージャーは一連の単体テストを望んでおり、Qt のテスト ライブラリを使用してそれらを実装しています。
とにかく、単体テストで sendData() メソッドを検証するために QTcpSocket からデータを受信するだけのダミーサーバーをセットアップしようとしています。テストソケットを接続すると、接続されていることが示されますが、ダミーサーバーとそのダミーソケットを接続するためのスロットは呼び出されません!
ここで私が間違っていることを誰かが見ることができますか? (テストクラスで壊れているように見える部分だけにコードを削除しました)
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