【发布时间】:2023-02-12 15:39:54
【问题描述】:
我有一个发出 http 请求并在响应不是 200 时抛出错误的函数。它看起来像这样:
def put_request(param1, param2):
url = f"api/v1/some/route"
response = requests.put(
url,
json=param2,
verify="test",
)
if response.status_code != 200:
raise CustomError()
return response.json()
我想测试异常是否正确,所以我的测试代码如下所示:
def test_put_request_error(mocker):
requests_mock = mocker.patch("path.to.file.requests")
requests_mock.put.return_value.status_code = 500
with pytest.raises(CustomError) as error:
put_request(param1=param1, param2={some data})
assert error.value.code == 500
问题是,代码中的错误被引发并且执行停止。它永远不会回到我的测试中的断言。我可以使用一些建议来解决这个问题!
这种模式似乎适用于我的其他测试用例,所以我不确定这里的问题是什么!
编辑:问题出在进口!从我的测试中导入的内容需要与我的实际代码相同。这意味着两者都需要是绝对的或相对的!
【问题讨论】:
-
您确定引发了
CustomError而不是其他异常吗?你能显示测试输出吗?另外,您确定导入的CustomError与提出的相同(这些可能是不同的引用)。 -
@MrBeanBremen 是的,正在返回此错误。输出中预计会出现错误:models.exceptions.CustomError:无法创建数据库实例。错误:<MagicMock name='requests.put().json()' id='5232268480'>
-
请将测试输出添加到问题中,而不是评论中,还请说明如何在代码和测试中导入异常。
-
@TurmoiledPython 如果您已经解决了您的问题,请写下完整的答案。
标签: python unit-testing python-requests mocking pytest