4

Qt の QTestLib 単体テスト フレームワーク + GMOck を使用しています。

単体テストで QTcpSocket から VerifySendData() メソッドへのデータを単純に受信するために、gMock を使用してモック サーバーをセットアップしようとしています。

誰かがモックオブジェクトgMOCKを作成する方法の例を教えてくれたら(EXPECT CALL、モックオブジェクトを作成する)

#ifndef TST_TCPCOMMTEST_H
#define TST_TCPCOMMTEST_H

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

class TcpCommTest : public QObject
{
    Q_OBJECT

private:
    QTcpSocket* pTestSocket;
    QTcpSocket* pMockSocket;
    QTcpServer* pMockServer;

public:
        TcpCommTest();

public slots:
    void connectMockServer();

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

#endif // TST_TCPCOMMTEST_H





#include "tst_tcpcommtest.h"
#include <QtDebug>
#include <QtCore/>
#include <QtTest/QtTest>
#include <QtNetwork/QtNetwork>
#include <gmock/gmock.h>


void TcpCommTest::connectMockServer()
{
    cout << "connection attempt" << endl;
    pMockSocket = pMockServer->nextPendingConnection();
}

void TcpCommTest::initTestCase()
{
    pMockSocket = NULL;
    pMockServer = new QTcpServer();

    //I want to use gMock here to create MockTCP Server
    EXPECT_CALL(pMockServer,someMethod(1).Times(AtLeaset(1));
     EXPECT_CALL(pMockServer,someMethod(2).Times(AtLeaset(1));
    //pMockServer->listen( QHostAddress("127.0.0.1"), 2000 );
    //connect( pMockServer, SIGNAL(newConnection()), SLOT(connectMockServer()) );

    pTestSocket = new QTcpSocket();
    pTestSocket->connectToHost( QHostAddress("127.0.0.1"), 2000 );

    QVERIFY( pTestSocket->waitForConnected( 1000 ) );
    QVERIFY( pTestSocket->state() == QTcpSocket::ConnectedState );
}

void TcpCommTest::VerifySendData()
{
    int i=0;
    QVERIFY( pMockSocket != NULL );
}

QTEST_MAIN(TcpCommTest);
4

1 に答える 1

0

コメントするほどの評判はありませんが、あなたが何を達成したいのか正確にはわかりません. テストしようとしているアプリは、ホストですか、それともクライアントですか?

とにかく、あなたは呼び出すことができません:

pMockServer = new QTcpServer();
EXPECT_CALL(pMockServer,someMethod(2))

pMockServer は、MOCK_METHOD1 マクロによって someMethod をモックしている必要があります。someMethod が QTcpServer で仮想の場合、QTcpServerMock は QTcpServer から派生して、

MOCK_METHOD1(someMethod, void(int))

モックしたいすべてのメソッドが仮想であるとは限らない場合、MOCK_METHOD1 でオーバーライドすることはできません。TcpServer と TcpServerMock から派生した TcpServerInterface を作成します。someMethod は、TcpServerInterface で仮想化され、TcpServer で実際に実装され、TcpServerMock でマクロによってモック化されます。Real TcpServer は QTcpServer をプライベート メンバーとして持つことができ、それをラップするだけです。

于 2015-02-18T14:46:22.267 に答える