首先让我们来详细讲解“Django单元测试中Fixtures用法详解”的完整攻略。
什么是Fixture?
Fixture是在测试中用来提供persist data的工具。它们可以包含初始数据、测试中需要用到的数据等等。
在Django中,Fixture使用JSON格式进行编写,这些JSON文件提供了初始数据,以便在测试中使用。
Fixtures的文件结构
为了清晰地组织Fixture,Django支持对Fixtures分组,一个Fixture目录包含了多个Fixture组,每个组由一个JSON格式的Fixture文件组成,一个Fixture组的名称不固定,可以根据具体情况而取。
如何使用Fixture?
要在Django中使用Fixture,需要进行如下步骤:
第一步,编写一个Fixture文件: 编写一个JSON格式的Fixture文件并保存为 fixture.json
,我们可以先编写一个简单的Fixture文件,比如这样:
[{
"model": "auth.user",
"pk": 1,
"fields": {
"username": "testuser",
"email": "testuser@gmail.com",
"password": "pbkdf2_sha256$100000$bchQnCJfuJrt$jIzcqF5EX1Z1uro4KelHt6aw1wd+TqXsCOIyZR/6VKw="
}
}]
这个Fixture文件包含了一个User对象的初始数据。
第二步,加载Fixture数据:
可以在Django的测试中使用 django.core.management.call_command
函数来加载Fixture数据,例如:
from django.test import TestCase
from django.core.management import call_command
class MyTestCase(TestCase):
fixtures = ['fixture.json']
def test_fixture(self):
self.assertEquals(1, len(User.objects.all()))
这个测试类包含了一个测试方法,我们在 fixtures
属性中指定了要使用的Fixture文件的名称,然后可以在测试方法中使用该Fixture中包含的数据进行测试。
Fixtures的数据量
Fixture中包含的数据量必须仔细考虑,过少的数据无法覆盖全面的测试,过多的数据也会带来效率的问题,我们可以根据具体情况来进行筛选,尽量让Fixture文件中包含的数据量与测试需求一致。
一个完整的Fixture示例
下面我们来看一个更完整的Fixture实例,此例中包含了两个Fixture文件 site_fixture.json
和 blogpost_fixture.json
,分别包含了对 Site
和 BlogPost
两个Model的初始数据,在测试中使用Fixture数据时应该按照文件名称的字母序进行加载。
site_fixture.json:
[{
"model": "sites.site",
"pk": 1,
"fields": {
"domain": "example.com",
"name": "Example.com"
}
}]
blogpost_fixture.json:
[{
"model": "blogpost.blogpost",
"pk": 1,
"fields": {
"title": "Example BlogPst",
"body": "The body of the blogpost",
"created": "2019-06-28T12:00:00Z",
"site": 1
}
}]
这里我们每个Fixture文件中各包含了一个数据,它们会被按照字母顺序依次加载,其中 blogpost_fixture.json
中的 BlogPost
与 site_fixture.json
中的 Site
联系起来。
然后我们可以在测试类中进行如下操作:
from django.test import TestCase
class BlogPostTest(TestCase):
fixtures = ['site_fixture.json', 'blogpost_fixture.json']
def test_basic_get(self):
post = BlogPost.objects.get(pk=1)
self.assertEqual(post.title, 'Example BlogPst')
这个测试类包含了一个测试方法,我们在 fixtures
属性中按照文件名称的字母顺序指定要使用的Fixture文件,可以在测试方法中使用该Fixture中包含的数据进行测试,其中的 BlogPost
对象包含了 Site
中的属性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django单元测试中Fixtures用法详解 - Python技术站