2013-04-25 42 views
13

我想测试是否引发异常我该怎么做?测试是否引发ValidationError

在我的models.py

我有这个功能,一个我想测试:

def validate_percent(value): 
    if not (value >= 0 and value <= 100): 
     raise ValidationError('error') 

在我tests.py我尝试这样做:

def test_validate_percent(self): 
    self.assertRaises(ValidationError, validate_percent(1000)) 

测试的输出:

..E 
====================================================================== 
ERROR: test_validate_percent (tm.tests.models.helpers.HelpersTestCase) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/...py", line 21, in test_validate_percent 
    self.assertRaises(ValidationError, validate_percent(1000)) 
    File "/....py", line 25, in validate_percent 
    raise ValidationError(u'error' % value) 
ValidationError: ['error'] 
+1

注意,在Python您的验证检查应写入'如果不为0 <=值<= 100' 。 – 2013-04-25 12:57:53

回答

19

assertRaises用作上下文管理器:

def test_validate_percent(self): 
    with self.assertRaises(ValidationError): 
     validate_percent(1000) 

或与可呼叫:

def test_validate_percent(self): 
    self.assertRaises(ValidationError, validate_percent, 1000) 
+1

在Python 2.7中增加了使用assertRaises作为上下文管理器,所以它在Python 2.6或更旧版本中不可用 - 比如在CentOS 5.x上使用系统安装的Python时。这一点我整合到CentOS 5.7的RPM构建过程中。 – pcurry 2013-04-25 13:22:07

+0

难以置信:) – 2018-02-20 08:41:59

2
def test_validate_percent(self): 
    self.assertRaises(ValidationError, validate_percent, 1000)