Django单元测试中Fixtures用法详解
在使用单元测试时,有时候需要测试数据库中有数据,这时我们可以使用Django的Fixtures来生成测试数据。
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVT的软件设计模式,即模型Model,视图View和模板Template。2005年7月在BSD许可证下发布。
在对Django项目做单元测试时,经常需要生成或者导入一些初始数据。对于已经有数据存在于正式数据库的app来说,使用Fixture载入数据,是最简便有效的方法。
本文通过配置
基础配置
在settings.py中配置如下内容:
FIXTURE_DIRS=('/path/to/api/fixtures/',)
在要测试的app中,增加目录 fixtures
在新增的 fixtures目录下,新建文件 myapp.json,文件名自己定,后缀必须是 .json。
配置myapp.json
文件中内容格式如下,实际使用时,要删除掉实际情况,使用数据,并删除掉注释,如果需要多条数据,可以多写几个{}的内容:
[{ "model":"myapp.user",#数据库名 "pk":"a864340d850f484bb89ea2981047bc5e",#要导入的数据 "fields":{#要导入的字段,字段名跟数据库(models)内的字段一样,值,根据实际需要设置 "username":"zhangsan", "user_num":"000", "zh_name":"张三", "mobile":"18712345678", "mail":"zhangsan@abc.com", "is_deleted":false, "create_time":"2013-01-16", "update_time":"2013-01-16" } }, ]
配置tests.py
classTest_user_name(TestCase): '''测试人员名称是否正常''' fixtures=['myapp.json']#在这里选择你要导入要测试的用户数据 deftest_user_name(self): user=User.objects.get(username='zhangsan') self.assertEqual(user.name,"zhangsan")
下边就可以运行你的单元测试了
提醒:
如果你配置了测试的Models的Signals,这部分的代码也会被执行
Fixtureloading
如果数据库里没有数据,那么对于一个基于数据库的网站来说,testcase并无多大的用处.为了给测试数据库加入测试数据更方便,django提供了载入fixtures的方法.
fixture是一系列的数据集合,django知道如何将它导入数据库。
创建fixture最直接的方法就是使用manage.pydumpdata.当然,这假设你的实际数据库里已经有数据了.
注意:
如果你运行过manage.pysyncdb命令,那么你已经使用过fixture了--只是你不知道而已。当你使用syncdb去创建数据库时,会创建一个叫initial_data的fixture。
其他名字的Fixture可以通过manage.pyloaddata命令手动安装.
一旦建立了一个fixture,并将它放在了某个djangoapp的fixtures目录中,你就可以在你的测试类里使用它了:
fromdjango.testimportTestCase frommyapp.modelsimportAnimal classAnimalTestCase(TestCase): fixtures=['mammals.json','birds'] defsetUp(self): #Testdefinitionsasbefore. call_setup_methods() deftestFluffyAnimals(self): #Atestthatusesthefixtures. call_some_test_code()
这是具体发生的过程:
1.在setup()运行前,django会清空数据库,相当于你执行了syncdb。
2.然后,所有的fixture会被安装.在例子中,django会安装任何一个名字为mammals的JSON格式的fixture和名为birds的fixture
总结
到此这篇关于Django单元测试中Fixtures用法详解的文章就介绍到这了,更多相关djangofixtures用法内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。