Есть ли альтернатива печати (из unittest.mock) в Python 2.7? - PullRequest
0 голосов
/ 22 января 2019

У меня есть следующая функция, для которой я хочу написать модульный тест для

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?

...