如何覆盖Django TestCase中的数据库设置

时间:2015-08-10 15:37:48

标签: django unit-testing django-database

我正在为Django应用程序编写测试用例。我想为不同的测试用例使用不同的数据库。因此,我想覆盖特定测试用例的默认数据库设置。

e.g。

class FooTest(TestCase):
    fixtures = ['df_fixtures1.json']

    def setUp(self):
        print "SETTING UP?"

    def tearDown(self):
        print "Tear Down"

    @override_settings(DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'})
    def do_foo_related(self):
        Foo task.....
        pass

这不起作用,但这就是我想要的。无论如何都要做这样的事情吗?

编辑:我正在使用django1.5

2 个答案:

答案 0 :(得分:2)

您需要覆盖_pre_setup和_post_teardown方法。事实上,有一个python包用于完全相同的目的,它为Django提供了对不同数据库的测试支持。如果它符合您的目的,您可以使用它,否则它无论如何都可以用作参考。

Pypi Link: -

Django Test Addons

文档: -

Python Hosted

Read the docs

答案 1 :(得分:1)

理想情况下,您应该像这样定义test_settings.py文件

from settings import *
......
override whatever you want here
......

然后将manage.py更改为此类

#!/usr/bin/env python
import os
import sys


if __name__ == "__main__":
    test_settings = 'test_settings'
    settings = test_settings if 'test' in sys.argv else   'settings'
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", settings)

    from django.core.management import execute_from_command_line
    execute_from_command_line(sys.argv)

这将确保仅使用test_settings运行测试用例,以避免对主数据库产生任何副作用。