【问题标题】:How can I patch a function stored in a variable?如何修补存储在变量中的函数?
【发布时间】:2013-05-12 03:00:44
【问题描述】:

我怎样才能使以下测试起作用?

mymodule.py

import requests

http_methods = {
    "GET": requests.get,
    "POST": requests.post,
    "PUT": requests.put,
    "DELETE": requests.delete
}

def foo(method):
    r = http_methods[method]("http://some.thing")
    return r.status_code

tests.py

import unittest
from mock import patch
import mymodule

class MyTestCase(unittest.TestCase):
    ...
    @patch("requests.post")
    def test_foo(self, post):
        post.return_value = 200
        self.assertEquals(mymodule.foo("POST"), 200)

当我执行测试时,我得到了一个ConnectionError 异常,因为foo 正在执行真正的requests.post

【问题讨论】:

  • 你想做什么? 我怎样才能使下面的代码工作?对我(至少)理解不够有帮助。请说明您要达到的目标..
  • @Schoolboy 真正的代码更大并且具有“意义”。我删除了与问题没有直接关系的所有其他代码部分。我的问题是:给定一个具有多个功能的字典,我该如何修补它们?
  • @Schoolboy patch python 装饰器mock library.

标签: python python-2.7 mocking python-mock python-unittest


【解决方案1】:

试试@patch("mymodule.requests.post"),见where to patch

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-18
    • 2020-05-08
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    相关资源
    最近更新 更多