gpt4 book ai didi

c++ - QTestLib单元测试框架+Gmock(创建QTCPServer-Mock对象)

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:08 26 4
gpt4 key购买 nike

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

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

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

最佳答案

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

无论如何,你不能调用:

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 作为私有(private)成员并将其包装起来。

关于c++ - QTestLib单元测试框架+Gmock(创建QTCPServer-Mock对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com