Mic*_*Liu 9 python pytest python-requests python-unittest
我的代码如下:
import pytest
import requests
from unittest import mock
@mock.patch('requests.get')
def test_verify(mock_request):
mock_resp = mock.Mock()
mock_resp.status_code = 404
mock_request.return_value = mock_resp
r = requests.get()
with pytest.raises(requests.exceptions.HTTPError) as err_msg:
r.raise_for_status()
print(err_msg)
Run Code Online (Sandbox Code Playgroud)
由于响应的状态代码设置为 404,我预计会引发 HTTPError。但是,有一个错误说明
Failed: DID NOT RAISE <class 'requests.exceptions.HTTPError'>
Run Code Online (Sandbox Code Playgroud)
输出如下:
======================================== 测试会话开始====== ================================== 平台达尔文 -- Python 3.6.4, pytest-3.7.0, py- 1.5.2, pluggy-0.7.1 rootdir: /Users/michael/Code/youtube-data-api, inifile: plugins: requests-mock-1.5.2 收集了1个项目
temp_test.py F
[100%]==============================================失败==== ======================================================================
模拟请求 =
Run Code Online (Sandbox Code Playgroud)@mock.patch('requests.get') def test_verify(mock_request): mock_resp = mock.Mock() mock_resp.status_code = 404 mock_request.return_value = mock_resp r = requests.get() #print(r.status_code) with pytest.raises(requests.exceptions.HTTPError) as err_msg: r.raise_for_status() E Failed: DID NOT RAISE <class 'requests.exceptions.HTTPError'>temp_test.py:15: 失败 ====================================== 1 次失败在 0.12 秒内 = ======================================
终端输出:

mock_resp是一个mock.Mock()对象。调用raise_for_status()只会返回另一个Mock().
您需要使用保留原始raise_for_status(). 尝试这个:
import pytest
import requests
from unittest import mock
@mock.patch('requests.get')
def test_verify(mock_request):
mock_resp = requests.models.Response()
mock_resp.status_code = 404
mock_request.return_value = mock_resp
res = requests.get()
with pytest.raises(requests.exceptions.HTTPError) as err_msg:
res.raise_for_status()
print(err_msg)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4095 次 |
| 最近记录: |