我正在尝试为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')
如果您只想断言connect被正确调用,这很简单
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,则需要稍微调整补丁:
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')