2013-04-25 12 views
13

Ich möchte testen, ob eine Ausnahme ausgelöst wurde, wie kann ich das tun?Test, wenn ValidationError ausgelöst wurde

in meinem models.py Ich habe diese Funktion, die man möchte ich Test:

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

in meinem tests.py ich das versucht:

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

der Ausgang des Tests ist :

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

Beachten Sie, dass in Python Ihre Validierungsprüfung geschrieben werden sollte 'wenn nicht 0 <= Wert <= 100' . –

Antwort

19

assertRaises wird als Kontext-Manager verwendet:

oder mit einem aufrufbar:

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

Die Verwendung von assertRaises als Kontextmanager wurde in Python 2.7 hinzugefügt, so dass es in Python 2.6 oder älteren Versionen nicht verfügbar ist - etwa wenn das System Python auf CentOS 5.x installiert wird. Dies hat mich dazu gebracht, Unitests in den RPM-Build-Prozess auf CentOS 5.7 zu integrieren. – pcurry

+0

unglaublich :) –

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