默认情况下,当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的所有主要版本!