我使用模拟库修补程序中的一个类,该程序连接到外部资源并发送一个文档。
这样的结构像这样......
code.py
def make_connection():
connection = OriginalClass(host, port)
connection.connect()
connection.send(param)
connection.close()
test.py
@mock.path('code.OriginalClass')
def test_connection(self, mocked_conn):
code.make_connection()
mocked_conn.assert_called_with(host, port)
mocked_conn.connect.assert_called_once()
mocked_conn.send.assert_called_with(param)
第一个assert_called_with工作正常,但是对模拟类的方法的调用 不通过。我已经尝试过使用patch.object作为装饰器也没有运气。
答案 0 :(得分:3)
在第一次调用的返回值上调用connect()
和send()
方法;相应地调整你的测试:
mocked_conn.return_value.connect.assert_called_once()
mocked_conn.return_value.send.assert_called_with(param)
我通常首先存储对'实例'的引用:
@mock.path('code.OriginalClass')
def test_connection(self, mocked_conn):
code.make_connection()
mocked_conn.assert_called_with(host, port)
mocked_instance = mocked_conn.return_value
mocked_instance.connect.assert_called_once()
mocked_instance.send.assert_called_with(param)