【发布时间】:2016-06-14 17:58:47
【问题描述】:
在我的previous 问题中,我询问了如何在我的班级中模拟一个包装requests.get 的班级。如果我只调用一次requests.get,则提供的answer 效果很好。然而,事实证明我的课程比我的例子更复杂。
我的班级两次致电request.get。一次在初始化时,因为它到达了一个返回 API 值的 API 端点,我需要在我的实际请求中使用,一次在我进行 .fetch 调用时。
import requests
class ExampleAPI(object):
def __init__(self):
self.important_tokens = requests.get(url_to_tokens)['tokens']
def fetch(self, url, params=None, key=None, token=None, **kwargs):
return requests.get(url, params=self.important_tokens).json()
现在,我需要创建两个模拟响应。一个用于初始化,一个用于.fetch。使用上一个答案中的代码:
@patch('mymodule.requests.get')
def test_fetch(self, fake_get):
expected = {"result": "True"}
fake_get.return_value.json.return_value = expected
e = ExampleAPI() # This needs one set of mocked responses
self.assertEqual(e.fetch('http://my.api.url.example.com'), expected) # This needs a second set
我如何为这两个对request.get 的单独调用创建单独的响应?
【问题讨论】:
标签: python python-2.7 unit-testing mocking