gpt4 book ai didi

python - 如何将 mock.patch(...).start() 的返回值附加到父模拟?

转载 作者:行者123 更新时间:2023-12-05 06:41:33 27 4
gpt4 key购买 nike

模拟示例 list this example :

>>> manager = MagicMock()
>>> with patch('mymodule.Class1') as MockClass1:
... with patch('mymodule.Class2') as MockClass2:
... manager.attach_mock(MockClass1, 'MockClass1')
... manager.attach_mock(MockClass2, 'MockClass2')
... MockClass1().foo()
... MockClass2().bar()
...
<MagicMock name='mock.MockClass1().foo()' id='...'>
<MagicMock name='mock.MockClass2().bar()' id='...'>
>>> manager.mock_calls
[call.MockClass1(),
call.MockClass1().foo(),
call.MockClass2(),
call.MockClass2().bar()]

我想完成同样的事情,但是使用 explicit start and stop calls在修补程序而不是上下文管理器上,似乎 patcher.start() 返回的东西在上下文化的意义上不是真正的模拟,至少在能力方面将它们附加到父模拟:

>>> from mock import patch, Mock
>>> p = patch('requests.get', autospec=True)
>>> manager = Mock()
>>> manager.attach_mock(p.start(), 'requests_get')
>>> import requests
>>> requests.get('https://google.com')
<MagicMock name='get()' id='4472381392'>
>>> manager.mock_calls
[]
>>> p.stop()
>>> manager.mock_calls
[]

我是否遗漏了什么,或者这是一个错误,模拟多个此类调用并验证它们是否全部按预期顺序进行的最佳方法是什么?

最佳答案

因为 autospec=True 并且一个函数被模拟出来,patch 也会返回一个函数。为了访问模拟对象,您可以访问 patch(…).start().mock

关于python - 如何将 mock.patch(...).start() 的返回值附加到父模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252088/

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