我现在正在对已经存在的代码进行单元测试。我面临的下一个问题是:
在运行syncdb以创建测试数据库之后,Django会自动填充几个表,如django_content_type或auth_permissions。
然后,假设我需要运行一个复杂的测试,比如检查用户注册,这将需要大量的ot数据表和它们之间的连接。
如果我尝试使用我现有的整个数据库来制作夹具(这对我来说相当方便)--我将收到类似于这里的错误。发生这种情况的原因是,Django已经填充了像django_content_type这样的表。
下一种可能的方法是使用django dumpdata --对已经填充了syncdb表的“排除”选项。但是这也不是很好,因为如果我从我的db和用户权限表中获取用户和用户组对象,这是由syncdb自动创建的,我可以接收错误,因为连接它们的主键现在指向错误。在“固定地狱”中更好地描述了这里,但是这里显示的解决方案看起来不太好)
我看到的下一个可能的方案是:
发布于 2010-03-26 09:33:19
问题就是这样解决的:
在syncdb创建了测试数据库之后,在测试的setUp部分中,我使用os.system
从代码中访问shell。然后,我只是加载数据库的转储,我想要用于测试。
因此,它的工作方式如下: syncdb用数据填充contenttype和其他一些表。然后,在setUp中,加载setUp的部分测试清除了以前创建的所有数据,我得到了一个很好的数据库。
也许不是最好的解决方案,但它是works=)
发布于 2010-07-22 15:02:28
我的方法是首先使用South来简化DB迁移(这一点根本没有帮助,但很好),然后使用一个模型创建方法模块。
当你跑的时候
$ manage.py test my_proj
Django安装了带有create的South,并运行所有迁移,为您提供一个完全更新的测试DB。
要编写测试,首先创建一个python模块calle,这里的test_model_factory.py创建创建对象的函数。
def mk_user():
User.objects.create(...)
然后,在测试中,您可以导入test_model_factory模块,并为每个测试创建对象。
def test_something(self):
test_user = test_model_factory.mk_user()
self.assert(test_user ...)
https://stackoverflow.com/questions/2507294
复制