在Python中模拟套接字连接
发布于 2021-01-29 14:58:13
我正在尝试为python中的类编写单元测试。该类在 init
上打开一个tcp套接字。我试图对此进行模拟,以便可以断言使用正确的值调用了连接,但是显然在单元测试中实际上并未发生。我已经厌倦了MagicMock,补丁程序等,但是还没有找到解决方案。
到目前为止我的班级看起来像
import socket
class MyClass(object):
def __init__(self):
self.tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.tcp_socket.connect('0.0.0.0', '6767')
关注者
0
被浏览
122
1 个回答
-
如果您只想断言
connect
被正确调用,这很简单import mock import socket class MyClass(object): def __init__(self): self.tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.tcp_socket.connect('0.0.0.0', '6767') with mock.patch('socket.socket'): c = MyClass() c.tcp_socket.connect.assert_called_with('0.0.0.0', '6767')
如果必须先导入模块才能访问
MyClass
,则需要稍微调整补丁:from mymodule import MyClass import mock with mock.patch('mymodule.socket.socket'): c = MyClass() c.tcp_socket.connect.assert_called_with('0.0.0.0', '6767')