Fah*_*tha 5 python django unit-testing django-testing
我在Debian上使用Django 1.2.3-3 + squeeze1使用PostgreSQL 8.4.7-0squeeze2(尽管我认为PostgreSQL与此无关),并使用以下setUp和tearDown运行基于unittest的Django单元测试
def setUp(self):
print "running setup"
self.c = Client()
self.user = User.objects.create_user('faheem', 'faheem@email.unc.edu', 'foo')
self.logged_in = self.c.login(username='faheem', password='foo')
settings.MEDIA_ROOT='/tmp/'
#settings.ZIP_UPLOAD='/var/tmp/zip/'
def tearDown(self):
print "running teardown"
FolderUpload.objects.all().delete()
FileUpload.objects.all().delete()
ZipFileUpload.objects.all().delete()
OldFileUpload.objects.all().delete()
# FIXME: Quick & dirty fix for the time being. Should make this a delete method.
os.system("rm -rf "+ settings.ZIP_UPLOAD + "/*")
Run Code Online (Sandbox Code Playgroud)
我们的想法是在运行单元测试之间从数据库中删除所有内容.根据unittest文档,这是什么tearDown.我遇到的问题是在不同的单元测试之间似乎仍然保存了一些状态.具体来说,我看到id增加了.因此,假设我创建了一个ZipFileUpload对象test1,然后创建了一个ZipFileUpload对象test2,那么我希望两个ID都可以1,但我看到的是id 1for test1和id 2for test2.如果id来自这些表之外的某个索引,那么这将是有意义的.我不太了解Diango如何知道这是否实际上是这样的.如果他们这样做,我不知道为什么.关于这一点的任何澄清将不胜感激.
无论如何,如果有人可以推荐数据库,我会满足于放弃数据库.应该采用这种方法teadDown.测试Django应用程序提到了以下功能,但我无法从中导入它django.test.utils.令人困惑的是,这个功能似乎在django/db/backends/creation.py.
destroy_test_db(old_database_name,verbosity = 1)
销毁其名称存储在DATABASES中的NAME中的数据库,并将NAME设置为使用提供的名称.
这句话的第一部分是Ok - "销毁数据库,其名称存储在DATABASES中的NAME中",但"设置NAME使用提供的名称"是什么意思?我假设提供的名称是old_database_name,
目前尚不清楚NAME上下文中的内容.它是NAMEin DATABASES,如果是,为什么我需要设置已设置的东西?我假设提供的名称是old_database_name,但如果是这样,为什么我要将其设置为一个名为old_database_name?的参数?这句话在开发文档中没有变化.
编辑:
在Steve Mayne的回复(见下文)之后,我想我会详细说明这一点的背景.
此应用程序最初是在2007/2008/2009编写的,包括单元测试.在大部分时间里,我使用的是1.0版本的Django.根据Ken Cochran的Django发布历史,1.0于2008年9月3日发布.描述的设置在那段时间运行良好.我看到上面的tearDown函数最初写于2007年12月.那么,也许Django的行为发生了变化?
事后看来,我意识到tearDown如上所述清空表并不能保证id计数将被重置为1,因为序列可以是与表中的单独对象.
感谢史蒂夫的解决方案.如果它存在,我想听听序列重置的便携式解决方案.我也对如何使上述destroy_test_db功能的解释感兴趣.
您可以使用以下SQL重置每个表上的ID序列:
SELECT pg_catalog.setval(pg_get_serial_sequence('table_name', 'id'), 1);
Run Code Online (Sandbox Code Playgroud)
只有在表空为止时才应该这样做.
| 归档时间: |
|
| 查看次数: |
1589 次 |
| 最近记录: |