创建测试数据库Django

时间:2014-06-02 09:39:17

标签: python django unit-testing

我在settings.py

中定义了一个mysql数据库
DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'<name>',
            'USER':'<user>',
            'PASSWORD':'<password>'
        }
    }

现在我需要为我的单元测试创​​建一个测试数据库。我在哪里需要提到测试数据库的设置,或者我根本不需要提及它们?

我在做的时候进行测试:

python manage.py test my_app

它说:

Creating test database for alias 'default'...
Skipping creation of NoticeTypes as notification app not found
E
======================================================================
ERROR: test_update_quiz (toolbox.tests.TestQuizCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/opt/2.0/site/toolbox/tests.py", line 20, in test_update_quiz
    akit = AssignmentKit.objects.get(pk = akit_id)
  File "/usr/local/lib/python2.7/site-packages/django/db/models/manager.py", line 131, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 366, in get
    % self.model._meta.object_name)
DoesNotExist: AssignmentKit matching query does not exist.

----------------------------------------------------------------------
Ran 1 test in 0.003s

FAILED (errors=1)
Destroying test database for alias 'default'...

测试给出的错误是错误的。因为我在数据库中确实有这个对象,所以我从ORM检查过。为什么会出现这个错误?我的数据库没有正确链接?

1 个答案:

答案 0 :(得分:4)

测试文档确实解释了这一点。您没有为测试创建数据库,Django会在运行测试时自动执行。但是db每次都是从头开始创建的,所以你的测试本身需要用任何所需的数据填充数据库:通过fixture,或者直接在测试或setUp方法中创建实体。

单元测试的全部意义在于它们完全是自包含的,并且不依赖于任何外部状态:使用现有数据库会违反该规则。