У меня есть следующая функция, для которой я хочу написать модульный тест для
def get_user_data(user, session):
'''Given a github user, gets it data'''
url = f'https://api.github.com/users/{user}'
response = session.get(url)
json_response = response.json()
return json_response["login"]
Вот как я тестирую вышеуказанную функцию
from unittest.mock import Mock, MagicMock
from requests import Session
response_payload = {"login": "agrawalo"}
fake_session = MagicMock(spec=Session)
fake_session.get.return_value.get_json.return_value = response_payload
Если вы заметили код, приведенный выше, вместонасмешливого метода "json" для объекта ответа Я создал насмешку для метода "get_json".В результате создается метод get_json для объекта ответа.И теперь, когда я звоню
get_user_data("agrawalo", fake_session)
, я получаю
<MagicMock name='mock.get().json().__getitem__()' id='139783470311800'>
, в то время как я ожидаю, что вышеупомянутый unittest потерпит неудачу с NoAttributeError.
В python 3.8 есть способИсправьте вышеуказанную проблему, используя «печать» из unitest.mock.
# from python 3.8
from unittest.mock import seal
seal(fake_session)
get_user_data("agrawalo", fake_session)
Как я могу сделать это в Python 2.7?