gpt4 book ai didi

python - 将 side_effect 与模拟一起使用时未调用异常

转载 作者:行者123 更新时间:2023-11-28 16:32:27 29 4
gpt4 key购买 nike

我在名为“my_module”的模块中的名为“my_class”的类中有一个函数,该模块包含以下代码段:

try:
response = self.make_request_response(requests.post, data, endpoint_path)
except requests.exceptions.HTTPError as err:
if err.response.status_code == requests.codes.conflict:
logging.info('Conflict error')

我正在尝试像这样测试它:

error = requests.exceptions.HTTPError(mock.Mock(response=mock.Mock(status_code=409)), 'not found')
mock_bad = mock.Mock(side_effect=error)
mock_good = mock.Mock()
mock_good.return_value = [{'name': 'foo', 'id': 1}]


upsert = my_module.my_class(some_data)
with mock.patch.object(upsert, 'make_request_response', side_effect=[mock_bad, mock_good]) as mock_response:
some_function()

我期望的是在我修补它之后在测试中引发 HTTPError。但是,当我运行测试时,从未引发异常。 “response”实际上设置为 mock_bad,它包含所需的异常,尽管它从未引发过。知道我哪里出错了吗?

最佳答案

您将异常放入了错误的副作用中。调用 make_request_response() 现在首先返回 mock_bad 模拟,它本身不会引发异常,直到被调用。

将异常放在mock.patch.object() side_effect 列表中:

error = requests.exceptions.HTTPError(mock.Mock(response=mock.Mock(status_code=409)), 'not found')
mock_good = mock.Mock()
mock_good.return_value = [{'name': 'foo', 'id': 1}]


upsert = my_module.my_class(some_data)
with mock.patch.object(upsert, 'make_request_response', side_effect=[error, mock_good]) as mock_response:
some_function()

关于python - 将 side_effect 与模拟一起使用时未调用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30536591/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com