我有一个名为 Thing
的模型,它有一个名为 name
的属性,我希望 name 是一个只有 3 个字符长的字符字段.
如何为此编写测试?
class TestCase1(TestCase):
def test1(self):
thing = Thing(name='1234')
该测试应该失败。如何正确编写测试,以便在该对象失败时测试通过?
最佳答案
如果您希望 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 替换为您希望通过使用太长的字符串创建对象而获得的异常。验证错误?
第三种选择(从 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了解更多详情。
关于django - 如何编写意味着失败的 Django 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4218161/