我在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检查过。为什么会出现这个错误?我的数据库没有正确链接?
答案 0 :(得分:4)
测试文档确实解释了这一点。您没有为测试创建数据库,Django会在运行测试时自动执行。但是db每次都是从头开始创建的,所以你的测试本身需要用任何所需的数据填充数据库:通过fixture,或者直接在测试或setUp方法中创建实体。
单元测试的全部意义在于它们完全是自包含的,并且不依赖于任何外部状态:使用现有数据库会违反该规则。