如何使用GoogleMock设置模拟服务器
How to set up a mock server with GoogleMock
我正在将旧的C代码转换为C++,并在用GoogleTest重写时对其进行测试。我的部分代码使用套接字连接到具有IPV4地址的远程主机。我很难理解如何使用GoogleTest和GoogleMock来测试代码的套接字部分。
我的对象需要一个主机IP地址和等待的秒数,然后再尝试连接到主机。有一个名为"conn()"的函数,它实际上试图连接到主机。这就是我想要测试的功能。所以在我的测试中,我想做一些类似的事情:
TEST(CONNECTION_TEST, Connection)
{
MyObject obj("###.###.###.###", 1);
ASSERT_TRUE(obj.conn());
}
我在这里读到,我需要模拟服务器,因为测试远程主机实际上并不可取。我是GoogleMock的新手,所以我阅读了官方文档,阅读了GoogleTest入门书、GoogleMock For Dummies、GoogleMockCheat Sheet和GoogleMock Cookbook。我看了CodesBay的教程。我看了SO上的几篇帖子,包括我试图用谷歌模拟一个简单的C++方法有什么问题?,进行标准库调用的C++方法的单元测试模式,以及如何对BSD套接字进行单元测试。
对于我的模拟服务器,我做了以下操作。我制作了一个封装Socket.h的Socket类,然后从中扩展了MockSocket
TEST(CONNECTION_TEST, Connection)
{
// bind to local host?
MyObject obj("0.0.0.0", 1);
// create the host
MockSocket mock_sock;
MockSocket new_sock;
EXPECT_CALL(mock_sock, create()).Times(1);
EXPECT_CALL(mock_sock, bind(_));
EXPECT_CALL(mock_sock, listen());
EXPECT_CALL(mock_sock, accept(_));
mock_sock.create();
mock_sock.bind(123);
mock_sock.listen();
mock_sock.accept(new_sock);
ASSERT_TRUE(obj.conn());
}
正如你所知,我不知道自己在做什么。我的测试结果失败了,我想这是因为我做得不对。拜托,有人能指引我朝正确的方向走吗?模拟服务器是测试我的对象的正确方法吗?
您想要测试什么?
你想测试TCP/IP套接字类(假设有一个)是否真的可以与一些TCP/IP服务连接和通信吗?这更像是一个端到端的测试。你可以使用谷歌测试来实现这一点,但你需要一个运行的TCP/IP服务来进行通信。这不是谷歌嘲讽框架的用武之地。这类似于当你想测试一个读取文件的类时:你需要一个它可以读取的文件,而谷歌嘲讽框架在这里对你没有帮助。
您想测试使用您的TCP/IP套接字类的其他类是否工作吗?在这里,您可以使用Google mocking框架为您的套接字类创建mock。这个mock将充当其他类的套接字类,但不会进行任何TCP/IP通信。通过这种方式,您可以对其他类进行单元测试。
- 如何使用Google Mock来模拟gettimeofday()
- G锁定铸造到基础上会释放模拟行为
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 落砂模拟碰撞检测C++和SFML
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 在gtest.中使用fff.h模拟系统API
- 从服务器传输到客户端的消息不会出现
- 谷歌模拟和覆盖关键字
- 用C#中的并集模拟C++嵌套结构
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- OpenSSL TLS服务器-使用客户端证书白名单
- librdkafka c++ 库是否有模拟服务器或代理
- 如何使用GoogleMock设置模拟服务器
- 在 Boost ASIO 中,如何设置源 IP 地址以模拟其他服务器的 IP 地址?
- 在Linux系统上模拟类似服务器的端口活动(仅软件端口),用于学术目的
- 如何模拟一个客户端服务器应用程序,我写在c++使用windows sockets