Я пытаюсь создать несколько модульных тестов для своего класса. Я хочу издеваться над ними, чтобы не сжечь свою квоту API, выполняя некоторые из этих тестов. У меня есть несколько тестовых случаев, которые будут вызывать метод fetch
, и в зависимости от переданного URL-адреса я получу разные результаты.
Мой пример класса выглядит так:
import requests
class ExampleAPI(object):
def fetch(self, url, params=None, key=None, token=None, **kwargs):
return requests.get(url).json() # Returns a JSON string
учебник, который я смотрю на выставках что я могу сделать что-то вроде этого:
import unittest
from mock import patch
def fake_fetch_test_one(url):
...
class TestExampleAPI(unittest.TestCase):
@patch('mymodule.ExampleAPI.fetch', fake_fetch_test_one)
def test_fetch(self):
e = ExampleAPI()
self.assertEqual(e.fetch('http://my.api.url.example.com'), """{'result': 'True'}""")
Однако, когда я это делаю, я получаю сообщение об ошибке:
TypeError: fake_fetch_test_one() takes exactly 1 argument (3 given)
Как правильно издеваться над вызовом requests.get
, который находится в методе моего класса? Мне понадобится возможность изменить фиктивный ответ для каждого теста, потому что разные URL-адреса могут предоставлять разные типы ответов.