当前位置:  开发笔记 > 编程语言 > 正文

在每种测试方法之前清理django中的数据库

如何解决《在每种测试方法之前清理django中的数据库》经验,为你挑选了1个好方法。

默认情况下,当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.



1> Marcin..:

一如既往,解决方案是微不足道的:django.test.TestCase不要使用unittest.TestCase.它适用于Django的所有主要版本!


永远不要说"一如既往" - 你要求麻烦.:-)
根据我的经验,这只会清理默认数据库,并且您自己清理任何其他数据库.什么是清理非默认数据库的最佳方法?
设置`multi_db = True`来清理所有数据库(如果你使用多个数据库)
推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有