我正在尝试在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 :(得分:8)
如果您只想声明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')