django - 如何编写意味着失败的 Django 测试?

标签 django testing tdd

我有一个名为 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/

相关文章:

testing - 在 Testcafe 中,如何等待同一选择器的第二个元素出现?

django - 在 Django 中扩展一个 contrib 模型的字段

python - 应该多久使用一次 Python 装饰器?

testing - 在 DDD(领域层)中使用测试驱动

objective-c - 使用 SenTest 测试断言

react-router - 如何修复: TypeError: ReactWrapper::state ("<state>") 要求 `state` 不能是 `null` 或 `undefined`

Django Rest-将@action与自定义装饰器一起使用

django - 与带有 UUIDField 的模型一起使用时,GenericForeignKey 得到错误的 id

unit-testing - 那里有哪些 'styles' 测试框架?

node.js - Mocha 和超测有什么区别?