2012-04-18 83 views
4

我正在使用Qt的QTestLib單元測試框架+ GMOck。QTestLib單元測試框架+ Gmock(創建QTCPServer - 模擬對象)

我想設置模擬服務器使用gMock簡單地接收數據從一個單元測試QTcpSocket VerifySendData()方法。

如果有人給我一個例子,我怎麼可以創建模擬對象gMOCK(除CALL,創建Mock對象)

#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作爲私有成員並將其包裝。