2012-04-18 18 views
4

私はQtのQTestLibユニットテストフレームワーク+ GMOckを使用しています。QTestLibユニットテストフレームワーク+ Gmock(QTCPServer - モックオブジェクトの作成)

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

誰かが私に私はモックオブジェクトgMOCKを作成する方法の例を与える場合(モックオブジェクトを作成し、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); 

答えて

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でマクロによって嘲られます。 リアルTcpServerはプライベートメンバーとしてQTcpServerを持つことができ、それをラップするだけです。

関連する問題