Si vous vous attendez à ce que Thing(name='1234') lève une exception, il y a deux façons d'y remédier.
L'une d'entre elles consiste à utiliser la fonction assertRaises de Django (qui provient en fait de unittest/unittest2) :
def mytest(self):
self.assertRaises(FooException, Thing, name='1234')
Cette méthode échoue sauf si Thing(name='1234') soulève une erreur FooException. Une autre façon est d'attraper l'exception attendue et d'en lever une si elle ne se produit pas, comme ceci :
def mytest(self):
try:
thing = Thing(name='1234')
self.fail("your message here")
except FooException:
pass
Évidemment, remplacez l'exception FooException par celle que vous vous attendez à obtenir en créant l'objet avec une chaîne trop longue. ValidationError ?
Une troisième option (à partir de Python 2.7) consiste à utiliser assertRaises comme gestionnaire de contexte, ce qui permet d'obtenir un code plus propre et plus lisible :
def mytest(self):
with self.assertRaises(FooException):
thing = Thing(name='1234')
Malheureusement, cela ne permet pas de personnaliser les messages d'échec des tests, alors documentez bien vos tests. Voir https://hg.python.org/cpython/file/2.7/Lib/unittest/case.py#l97 pour plus de détails.