在使用django TestCase进行测试时,如何检查ValidationError异常?

时间:2017-10-04 10:51:30

标签: python django validation testing

我正在使用django.test.TestCase进行Django测试,我想知道检测验证错误的pythonic方法。我已经提出了下面这个有效,但感觉有点长,并且在大量测试中容易出错

    self.valid_account.contact_number = "1234567" # Too short
    with self.assertRaises(ValidationError):
        try:
            self.valid_account.full_clean()
            self.fail("Did not raise validation error")
        except ValidationError as e:
            self.assertTrue('contact_number' in e.message_dict)
            raise e

有没有更好的方法来检查和测试异常?

1 个答案:

答案 0 :(得分:3)

如果您手动处理异常,则使用assertRaises毫无意义。如果您还需要检查异常,the solution is documented

  

上下文管理器将捕获的异常对象存储在其exception属性中。如果打算对引发的异常执行附加检查,这可能很有用

所以在你的情况下,这将是:

self.valid_account.contact_number = "1234567" # Too short
with self.assertRaises(ValidationError) as cm:
    self.valid_account.full_clean()

self.assertTrue('contact_number' in cm.exception.message_dict)