如何根据必要的数据预填充测试数据库?

时间:2017-04-30 16:05:37

标签: django postgresql unit-testing django-testing

我需要在我的Django项目中做一些unit tests。问题是几乎每个用例都依赖于预先填充的数据库对象。

例如,如果所有pre_save信号都成功,我想创建一个产品并进行测试。

from django.contrib.auth.models import User
from django.test import TestCase

from .models import Product


class ProductTestCase(TestCase):
    def setUp(self):
        self.user = User.objects.create(username='test_user')
        self.product = Product.objects.create(name='Test product',user=self.user)


    def test_product_exists(self):
        self.assertIsNotNone(self.product)

    def product_is_active_by_default(self):
        ...

我无法做到这一点,因为产品必须与User对象相关。但我无法创建User对象,因为User必须包含相关的plan对象。我的生产数据库中有多个计划,其中一个是默认计划,但测试数据库中没有计划。

因此,为了能够进行单元测试,我需要使用多个应用程序中的多个对象预填充测试数据库。

我该怎么做?

1 个答案:

答案 0 :(得分:8)

你可以简单地使用django灯具: - )

首先使用数据填充示例数据库,然后使用python manage.py dumpdata

导出数据

然后在你的一个应用程序中创建一个名为fixtures的目录并将导出的json文件放在那里(名为tests.json或其他内容)

在您的测试类中加载像这样的

class ProductTestCase(TestCase):
    fixtures = ['tests.json', ]

结帐django docs

PS:结帐工厂男孩也是(@Gabriel Muj)回答