gpt4 book ai didi

python - Pytest 引发测试失败 requests.raise_for_status()

转载 作者:行者123 更新时间:2023-12-04 11:04:02 26 4
gpt4 key购买 nike

我最近开始使用 pytest,甚至最近开始使用 mock 来模拟 requests图书馆。我已经创建了一个 requests.Response 对象,对于 200 状态代码它工作正常。我在这里尝试做的是使用 raise_for_status() 检查超出速率限制的错误,并测试它是否使用 pytest 处理异常。

我正在使用 Mock side_effect 选项,这似乎触发了我希望的异常,但 pytest 似乎没有意识到这已经发生并且测试失败。

有什么想法吗?我敢肯定这是我遗漏的东西!

我为类(class)编写的代码是:

class APIClient:
def get_records(self, url):
try:
r = requests.get(url)
r.raise_for_status()
return r.json()
except requests.HTTPError as e:
print("Handling the exception")

在测试课上,我得到了:
@pytest.fixture
def http_error_response(rate_limit_json):
mock_response = mock.Mock()
mock_response.json.return_value = rate_limit_json
mock_response.status_code = 429

mock_response.raise_for_status.side_effect = requests.exceptions.HTTPError

return mock_response


class TestRecovery(object):

@mock.patch('requests.get')
def test_throws_exception_for_rate_limit_error\
(self, mock_get, api_query_object, http_error_response):

mock_get.return_value = http_error_response
print(http_error_response.raise_for_status.side_effect)

url = api_query_object.get_next_url()

with pytest.raises(requests.exceptions.HTTPError):
api_query_object.get_records(url)

我得到的输出是:
    with pytest.raises(requests.exceptions.HTTPError):
> api_query_object.get_records(url)
E Failed: DID NOT RAISE

---------------------- Captured stdout call ----------------------
<class 'requests.exceptions.HTTPError'>
Handling the exception

最佳答案

您正在指示 pytest 预期应该在 APIClient.get_records 中引发的异常但是在该方法定义中,您已经在捕获异常并进行打印。
异常确实发生了,它通过在控制台输出中查看打印结果来证明。
相反,您应该检查方法 raise_for_status 的模拟。被称为。

关于python - Pytest 引发测试失败 requests.raise_for_status(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35523402/

26 4 0
文章推荐: java - Android Studio 错误 : "Manifest merger failed: Apps targeting Android 12"
文章推荐: flutter - 如何在 Flutter 中将 List 保存到 SharedPreferences?