#python #unit-testing #mocking #httpresponse
#python #модульное тестирование #издевательство #httpresponse
Вопрос:
Как новичок, я пытаюсь создать поддельный HTTP-ответ. Способ, который приходит мне на ум, — создать объект класса requests.models.Response()
, а затем установить его атрибуты:
def getFakeHTTPResponse(statusCode, text):
response = requests.models.Response()
response.status_code = statusCode
response.text = text
return response
Кажется, что приведенная выше функция должна работать. Но я получаю сообщение об ошибке: "AttributeError: can't set attribute."
это заставляет меня задуматься, потому что можно получить текстовый атрибут HTTP-ответа, но его невозможно установить. Более того, это отлично работает для status_code
атрибута, но я получаю ошибку для атрибута text.
Что вы предлагаете для создания поддельного ответа с использованием этого класса requests.models.Response()
?
Ответ №1:
Оба .text
.content
метода и реализованы с использованием @property
, поэтому вы можете прочитать его, но не записать. Вам нужно установить ._content
(используется .content
) и .encoding
(используется .text
), то есть
import requests
r = requests.models.Response()
r.status_code = 200
r._content = "sometext".encode("utf-8")
r.encoding = "utf-8"
print(r.text)
вывод
sometext