python请求使用魔术模拟,如何在某些条件下调用原始方法

时间:2017-09-29 13:19:48

标签: python mocking

此处仅模拟某种类型的网址的代码

def mocked_requests_patch(*args, **kwargs):
    url = args[0]
    if url.find('additional_address') != -1:
        return 'mocked response'

    return requests.patch(*args, **kwargs)

requests.patch = MagicMock(side_effect=mocked_requests_patch)

但我当然得到maximum recursion depth exceeded while calling a Python object

看到了一些像这样的问题,但没有找到任何使用MagicMock

的问题

1 个答案:

答案 0 :(得分:2)

您可能找不到明确的问题,因为在安装模拟之前保存您自己对模拟方法的引用相对简单,在典型的使用中,patcher用于处理安装和卸载通过start()stop()系统地模拟。

在这种特殊情况下,因为您要模拟requests.patch,您可能需要考虑使用requests_mock包,因为它提供了一种机制,允许将某些请求发送到真正的http方法。实际上,您可以通过检查来源start() saves a referencestop()

later restored的发送函数的看法。