QTestLib 单元测试框架 + Gmock (Create QTCPServer语言 - Mock Object).
QTestLib unit test framework + Gmock (Create QTCPServer - Mock Object)
我正在使用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作为私有成员,并包装它。
相关文章:
- 如何使用Google Mock来模拟gettimeofday()
- 不同语言中相同代码的不同行为
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- r语言 - C++ 类型为"const std ::?
- 通用C++/Python 多语言的存在
- 为什么我的 EnumWindowProc 不能用 C 语言编译?
- 了解算法的性能差异(如果以不同的编程语言实现)
- Rextester 语言编译C++问题
- 如何将多种语言设置放在单个 .clang 格式文件中
- 不同语言中的模运算符差异
- 刚接触C++,难以理解语言的细微差别
- 为什么开发人员将C / C ++用于嵌入式系统,而不是像Python这样的高级语言与C相比?
- 我们可以用 C 语言嵌套 #define 和 #if 吗?
- 我的C++语言蛮力算法有问题
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- gmock / google-mock发出警告,并且通过模拟异常未通过测试
- 为什么编程语言被编译为汇编程序而不是二进制?
- QDirIterator语言 - No hasNext not FilePath reaction
- "C.UTF-8" C++ Windows 上的语言环境?
- QTestLib 单元测试框架 + Gmock (Create QTCPServer语言 - Mock Object).