默认情况下,当Django在sqlite后端运行时,它会为测试创建一个新的内存数据库。这意味着对于从unittest.TestCase派生的每个类,我都会得到一个新的数据库。是否可以对其进行更改,以便在运行每个测试方法之前将其清除?
示例:我正在测试一个管理器类,该类在Django持久对象之上提供额外的抽象。代码看起来更不像那样
class TestForManager(unittest.TestCase):
def testAddingBlah(self):
manager = Manager()
self.assertEquals(manager.getBlahs(), 0)
manager.addBlah(...)
self.assertEquals(manager.getBlahs(), 1)
def testAddingBlahInDifferentWay(self):
manager = Manager()
self.assertEquals(manager.getBlahs(), 0)
manager.addBlahInDifferentWay(...)
self.assertEquals(manager.getBlahs(), 1)
现在,第二个测试的第一个断言失败了,因为数据库的状态在测试调用之间保持不变,并且数据库中已经有一个Blah
实例。
和往常一样,解决方法很简单:使用
django.test.TestCase
而不是unittest.TestCase
。它适用于Django的所有主要版本!您可以使用
tearDown
方法。测试运行后将调用它。你可以删除那里所有的废话。为什么不这样做呢?这可以在不显著更改代码的情况下实现所需的功能。
编辑。“reset on TestCase”特性为您提供了完全的控制。
当测试用例不相互干扰时,单个测试用例中的许多测试方法都是好的。
当测试用例相互干扰时,单个测试用例中很少有测试方法是好的。
通过将测试方法分组到一个或多个测试用例中,可以选择应用于测试的模型。你完全可以控制。
相关问题 更多 >
编程相关推荐