2013-04-25 83 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)