Si espera que Thing (name = '1234') haga una excepción, hay dos formas de solucionar esto.
Uno es utilizar assertRaises de Django (en realidad de unittest/unittest2):
def mytest(self):
self.assertRaises(FooException, Thing, name='1234')
Esta falla a menos Cosa (name = '1234') genera un error FooException. Otra forma consiste en detectar la excepción esperada y levantar uno si esto no sucede, como esto:
def mytest(self):
try:
thing = Thing(name='1234')
self.fail("your message here")
except FooException:
pass
Obviamente, sustituya el FooException con el que espera obtener de la creación del objeto con demasiado tiempo una cadena. ¿Error de validacion?
Una tercera opción (a partir de Python 2.7) es el uso de assertRaises como un gestor de contexto, lo que hace más limpia, más legible el código:
def mytest(self):
with self.assertRaises(FooException):
thing = Thing(name='1234')
Lamentablemente, esto no permite mensajes de error de prueba especiales , documenta bien tus pruebas. Ver https://hg.python.org/cpython/file/2.7/Lib/unittest/case.py#l97 para más detalles.
Uso assertRaises con bastante frecuencia. –
Lo hago también, pero la sintaxis toma un tiempo para acostumbrarse. – GDorn
en Python versión 2.6.5, la firma de la función es diferente. Copiado del código python: 'def failUnlessRaises (self, excClass, callableObj, * args, ** kwargs)' y luego 'callableObj (* args, ** kwargs)'. Entonces, en el ejemplo de esta publicación, sería 'self.assertRaises (FooException, Thing, name = '1234')'. No estoy seguro de por qué la firma de mi función es diferente, pero eso es lo que funciona. –