在 Python 中模拟套接字连接
mocking a socket connection in Python
我正在尝试为 python 中的 class 编写单元测试。 class 在 init 上打开一个 tcp 套接字。我试图对此进行模拟,以便我可以断言连接是使用正确的值调用的,但显然在单元测试中实际上并没有发生。我厌倦了 MagicMock、补丁等,但我还没有找到解决方案。
我的 class 目前看起来是这样的
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')
如果你只是想断言 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')
我正在尝试为 python 中的 class 编写单元测试。 class 在 init 上打开一个 tcp 套接字。我试图对此进行模拟,以便我可以断言连接是使用正确的值调用的,但显然在单元测试中实际上并没有发生。我厌倦了 MagicMock、补丁等,但我还没有找到解决方案。
我的 class 目前看起来是这样的
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')
如果你只是想断言 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')