我正在使用模拟库来修补连接到外部资源并发送字典的程序中的类。
结构有点像这样......
代码.py
def make_connection():
connection = OriginalClass(host, port)
connection.connect()
connection.send(param)
connection.close()
测试.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)
第一个断言_调用_with 工作完美,但是对模拟类的方法的调用 不要通过。我尝试过使用 patch.object 作为装饰器,但没有成功。
最佳答案
在第一次调用的返回值上调用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)
关于Python Mock 不断言调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26343600/