【发布时间】:2015-04-28 16:07:43
【问题描述】:
我有一个看起来像这样的循环:
for i in range(len(some_list)):
response = requests.post(some_url, some_params)
if response.status_code != HTTPOk:
# do something
我想做的是在循环的第二次迭代中更改 requests.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 是我想要的,但我不确定模拟响应的最佳方法是什么。
【问题讨论】:
标签: python mocking pytest python-mock