【问题标题】:How to correctly use assertRaises in Django如何在 Django 中正确使用 assertRaises
【发布时间】:2018-10-01 22:55:41
【问题描述】:

我的模型中有以下验证函数:

@classmethod
def validate_kind(cls, kind):
    if kind == 'test':
        raise ValidationError("Invalid question kind")

我正在尝试如下测试:

w = Model.objects.get(id=1) 

self.assertRaises(ValidationError, w.validate_kind('test'),msg='Invalid question kind')

我也试过了:

self.assertRaisesRegex(w.validate_kind('test'),'Invalid question kind')

这两个都不能正常工作。我做错了什么?

【问题讨论】:

    标签: django python-unittest django-testing django-tests django-errors


    【解决方案1】:

    你调用assertRaises 的方式是错误的——你需要pass a callable 而不是调用函数本身,并将任何参数作为参数传递给函数assertRaises。将其更改为:

    self.assertRaises(ValidationError, w.validate_kind, 'test')
    

    请注意,您无法使用此构造测试异常消息 - 如果您想测试消息,您需要使用 assertRaises 作为上下文管理器:

    with self.assertRaises(ValidationError, msg='Invalid question kind'):
        w.validate_kind('test')
    

    【讨论】:

      【解决方案2】:

      接受的答案不正确。 self.assertRaises() 不检查异常消息。

      正确答案

      如果你想断言异常消息,你应该使用self.assertRaisesRegex()。

      self.assertRaisesRegex(ValidationError, 'Invalid question kind', w.validate_kind, 'test')
      

      或

      with self.assertRaisesRegex(ValidationError, 'Invalid question kind'):
          w.validate_kind('test')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-31
        • 2020-04-19
        • 1970-01-01
        • 2016-03-27
        • 2022-12-31
        • 2015-06-24
        • 2013-09-27
        相关资源
        最近更新 更多