【问题标题】:Raising an exception with pytest not working as expected在 pytest 未按预期工作时引发异常
【发布时间】: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


【解决方案1】:

这里的问题在于进口。在 MrBean Bremen 要求显示导入后,我意识到我的代码使用了相对路径而我的测试使用了绝对路径。当我把它们做成一样的时候,它们就起作用了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2020-10-05
    • 2019-02-18
    相关资源
    最近更新 更多