gpt4 book ai didi

Python Mock 不断言调用

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:17 24 4
gpt4 key购买 nike

我正在使用模拟库来修补连接到外部资源并发送词典的程序中的类。

结构有点像这样......

代码.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)

第一个 assert_called_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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com