2013-04-25 8 views
13

Voglio verificare se è stata sollevata un'eccezione come posso fare?Test se ValidationError è stato sollevato

nel mio models.py ho questa funzione, quella che vuole testare:

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

nel mio tests.py ho provato questo:

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

l'uscita del test è :

..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

Si noti che in Python vostro controllo di convalida dovrebbe essere scritto 'se non 0 <= valore <= 100' . –

risposta

19

assertRaises viene utilizzato come un contesto manager:

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

o con un richiamabile:

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

Utilizzando assertRaises come gestore di contesto è stato aggiunto in Python 2.7, quindi non è disponibile su Python 2.6 o precedente - come quando si utilizza il sistema Python installato su CentOS 5.x. Questo mi ha permesso di integrare le unittests nel processo di build RPM su CentOS 5.7. – pcurry

+0

incredibile :) –

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