У меня есть цикл, который выглядит так:
for i in range(len(some_list)):
response = requests.post(some_url, some_params)
if response.status_code != HTTPOk:
# do something
Что я хотел бы сделать, так это изменить ответ request.post во второй итерации цикла. Из своего теста я знаю, что могу сделать что-то вроде:
mock_response = mock.Mock()
mock_response.status_code = 404
with mock.patch(mymodule.requests.post, return_value=mock_response):
mymodule.some_function()
Но это, кажется, работает только для одного status_code. Я посмотрел на side_effect, и он выглядит так: Я могу перебирать цикл так:
mock_response.side_effect = [
mock.Mock(status_code=400), mock.Mock(status_code=200)
]
with mock.patch(mymodule.requests.post, return_value=mock_response):
mymodule.some_function()
Однако похоже, что на самом деле он не получает «правильный» код состояния. Каков наилучший способ изменить поведение в side_effect или return_value, чтобы правильно получить желаемое поведение? Я думаю, что мне нужен side_effect, но я не уверен, как лучше всего издеваться над ответами.