Wenn Sie erwarten, dass Thing (name = '1234') eine Ausnahme auslöst, gibt es zwei Möglichkeiten, damit umzugehen.
One ist Djangos assertRaises zu verwenden (eigentlich von Unittest/unittest2):
def mytest(self):
self.assertRaises(FooException, Thing, name='1234')
Dies schlägt fehl, wenn Thing (name = '1234') einen FooException Fehler auslöst. Ein anderer Weg ist die erwartete Ausnahme zu fangen und eine erhöhen, wenn es nicht geschieht, wie folgt aus:
def mytest(self):
try:
thing = Thing(name='1234')
self.fail("your message here")
except FooException:
pass
Offensichtlich die FooException mit der ersetzen Sie von der Erstellung des Objekts mit einer zu langen String erhalten erwarten. Validierungsfehler?
Eine dritte Option (ab Python 2.7) ist assertRaises als Kontext-Manager zu verwenden, die für sauberere, lesbaren Code macht:
def mytest(self):
with self.assertRaises(FooException):
thing = Thing(name='1234')
Leider ist dies nicht für kundenspezifische Testfehlermeldungen erlaubt , also dokumentieren Sie Ihre Tests gut. Weitere Informationen finden Sie unter https://hg.python.org/cpython/file/2.7/Lib/unittest/case.py#l97.
Ich benutze assertRaises ziemlich oft. –
tue ich auch, aber die Syntax braucht etwas gewöhnungsbedürftig. – GDorn
in Python-Version 2.6.5 ist die Funktion Signatur anders. Aus dem Python-Code kopiert: 'def failUlessRaises (self, excClass, callableObj, * args, ** kwargs)' und dann 'callableObj (* args, ** kwargs)'. Im Beispiel dieses Beitrags wäre es also "self.assertRaises (FooException, Thing, name = '1234')". Ich bin nicht sicher, warum meine Funktion Signatur ist anders, aber das ist, was funktioniert. –