python request超时异常退出_Python请求Mock不捕获超时异常

我在这里看到了两个问题。一个是直接修复问题,另一个是对Mocking框架的轻微误用,它进一步简化了您的实现。在

首先,为了直接解决您的问题,根据您如何测试您的断言,您实际上希望在这里做什么:requests.get = get

您应该在这里使用side_effect来帮助引发异常。根据documentation:side_effect allows you to perform side effects, including raising an

exception when a mock is called

记住这一点,你真正需要做的就是:

^{pr2}$

这应该会引起你的异常。然而,你很可能会面临这样的错误:TypeError: catching classes that do not inherit from BaseException is not allowed

这可以通过阅读{a2}关于为什么会发生这样的好答案来解释。有了这个答案,接受这个建议实际上只是模仿你需要的东西,这将有助于完全解决你的问题。因此,最终,您的代码实际上看起来像这样,使用mocked get而不是mockedrequests模块:class MyUnitTest(unittest.TestCase):

@patch('my_module.requests.get')

def test_my_test(self, m_get):

def get(*args, **kwargs):

raise Timeout()

m_get.side_effect = get

try:

my_method()

except MyException:

return

现在可以通过更好地使用unittest中的assertRaises而不是try/except来进一步简化这一过程。这将最终断言在调用方法时引发了异常。此外,您不需要来创建一个将引发超时的新方法,实际上可以简单地声明mocked get将有一个引发异常的side_effect。因此,您可以简单地将整个def get替换为:m_get.side_effect = Timeout()

但是,实际上您可以直接将其放入补丁装饰器中,因此,现在您的最终代码如下所示:class MyUnitTest(unittest.TestCase):

@patch('my_module.requests.get', side_effect=Timeout())

def test_my_test(self, m_get):

with self.assertRaises(MyException):

my_method()

我希望这有帮助!在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值