【发布时间】:2025-12-10 01:35:01
【问题描述】:
默认情况下,当 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?因为所有当前版本都会在每次测试方法调用时刷新数据库。
-
0.96。也许它值得升级。我会试试这个。
标签: python django unit-testing django-models