【问题标题】:QTestLib unit test framework + Gmock (Create QTCPServer - Mock Object)QTestLib 单元测试框架 + Gmock (创建 QTCPServer - Mock Object)
【发布时间】:2012-04-29 09:08:43
【问题描述】:

我正在使用 Qt 的 QTestLib 单元测试框架 + GMOck。

我正在尝试使用 gMock 设置模拟服务器,以便在单元测试中简单地从 QTcpSocket 接收数据到 VerifySendData() 方法。

如果有人能给我一个例子,我可以如何创建模拟对象 gMOCK(期望调用,创建模拟对象)

#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);

【问题讨论】:

    标签: c++ qt qtestlib gmock


    【解决方案1】:

    我没有足够的声誉来发表评论,但我不知道你想要达到什么目的。 您尝试测试的应用是主机还是客户端?

    无论如何,你不能打电话:

    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 作为私有成员并对其进行包装。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      相关资源
      最近更新 更多