QTestLib 单元测试框架 + Gmock (Create QTCPServer语言 - Mock Object).

QTestLib unit test framework + Gmock (Create QTCPServer - Mock Object)

本文关键字:语言 Mock Object QTCPServer Create 框架 单元测试 Gmock QTestLib      更新时间:2023-10-16

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

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

如果有人给我一个例子,我如何创建模拟对象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);

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

无论如何,您不能调用:

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

pMockServer 一定通过MOCK_METHOD1宏模拟了某个方法。如果某些方法在 QTcpServer 中是虚拟的,那么 QTcpServerMock 可以从 QTcpServer 派生,并且只有

MOCK_METHOD1(someMethod, void(int))

如果不是所有要模拟的方法都是虚拟的,那么您不能用MOCK_METHOD1覆盖它。我会创建由TcpServer和TcpServerMock派生的TcpServerInterface。someMethod 在 TcpServerTInterface 中是虚拟的,在 TcpServer 中实现,在 TcpServerMock 中由宏模拟。真正的TcpServer可以将QTcpServer作为私有成员,并包装它。