代码之家  ›  专栏  ›  技术社区  ›  WebQube

python使用magic mock请求,在某些情况下如何调用原始方法

  •  0
  • WebQube  · 技术社区  · 7 年前

    这里的代码只模拟某一类型的url

    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 回复  |  直到 7 年前
        1
  •  2
  •   jq170727    7 年前

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

    在这种情况下,因为你在嘲笑 requests.patch 您可能需要考虑使用 requests_mock 它提供了一种机制,允许将一些请求发送到真正的http方法。事实上,你可以通过检查源代码来了解它是如何工作的 saves a reference later restored 通过 停止()