Ответ 1
Если вы ожидаете, что Thing (name= '1234') поднимет исключение, есть два способа справиться с этим.
Один из них - использование аргументов Django assertRaises (на самом деле из unittest/unittest2):
def mytest(self):
self.assertRaises(FooException, Thing, name='1234')
Это не удается, если Thing (name= '1234') вызывает ошибку FooException. Другой способ - поймать ожидаемое исключение и поднять его, если этого не произойдет, например:
def mytest(self):
try:
thing = Thing(name='1234')
self.fail("your message here")
except FooException:
pass
Очевидно, замените FooException тем, который вы ожидаете получить от создания объекта со слишком длинной строкой. ValidationError?
Третий вариант (с Python 2.7) заключается в том, чтобы использовать assertRaises в качестве менеджера контекста, что делает более понятным и понятным код:
def mytest(self):
with self.assertRaises(FooException):
thing = Thing(name='1234')
К сожалению, это не позволяет создавать собственные сообщения об ошибках тестирования, поэтому хорошо документируйте ваши тесты. Подробнее см. https://hg.python.org/cpython/file/2.7/Lib/unittest/case.py#l97.