Django单元的测试,装载固定装置的几个相关应用程序的问题
-
22-09-2019 - |
题
我现在做的单元的测试已经存的代码。我面临的下一个问题:
运行之后syncdb为建立试验数据库、Django自动填补了几个表象django_content_type或auth_permissions.
然后,想象一下我需要运行一个复杂的测试,如检查的用户注册,这将需要一个论ot数据表格和它们之间的连接。
如果我尝试用我的整个现有的数据库,用于制作装置(这将是相当不方便,对我)-我会收到的错误喜欢 在这里,.发生这种情况的原因是,Django已经充满了表像django_content_type.
下一个可能的办法是使用django dumpdata--排除选项已经充满了syncdb表。但是,这不起作用也很好,因为如果我带用户与用户组对象从我的数据库和用户的权限表,这是自动建立通过syncdb,我可以接受的错误,因为主要钥匙,连接它们的是,现在指的错误。这是更好的描述 在这里, 在部分'固地狱,但解决方案显示有doensn看起来不好)
下一个可能的方案,我看到下一步:
- 我跑我的测试;Django创建测试数据库,使syncdb和创造所有这些表。
- 在我的测试设置的我丢这个数据库,创造新的空白数据库。
- 负载数据从现有数据库也在测试装置
解决方案
这是如何的问题是解决:
后syncdb创造了测试数据库,在安装的一部分测试我的使用 os.system
访问壳从我的代码。然后我只是装卸的数据库,该数据库我要用于试验。
所以这个的工作原理是这样的:syncdb填补contenttype和其他一些表格数据。然后在安装的一部分测试载sql倾倒清除所有以前创建的数据和我得到一个不错的数据库。
可能不是最好的解决方案,但它的工作原理=)
其他提示
我的做法将是第一次使用南使DB迁移容易(不帮助在所有,但是不错的),然后使用的一个模块的模型建立的方法。
当你在跑
$ manage.py test my_proj
Django与南安装与创建测试数据库,并运行所有移徙给你一个全新的试验数据库。
编写测试,第一次创建一个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 ...)