2013-04-25 2 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' , –

ответ

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

Использование assertRaises в качестве менеджера контекста было добавлено в Python 2.7, поэтому оно недоступно на Python 2.6 или старше - например, при использовании установленной системы Python на CentOS 5.x. Это позволило мне интегрировать unittests в процесс сборки RPM на CentOS 5.7. – pcurry

+0

невероятно :) –

2
def test_validate_percent(self): 
    self.assertRaises(ValidationError, validate_percent, 1000) 
Смежные вопросы