2015-08-10 2 views
1

Я пишу тестовые примеры для приложения Django. Я хочу использовать разные базы данных для разных тестовых случаев. Следовательно, я хочу переопределить настройки базы данных по умолчанию для конкретного тестового примера.
Как переопределить параметры базы данных в Django TestCase

например.

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 

Это не работает, но это то, что я хочу. Есть ли способ сделать что-то подобное?

Edit: Я использую django1.5

ответ

2

Вам необходимо перезаписать _pre_setup и _post_teardown методы. Фактически, существует пакет python для той же цели, который обеспечивает поддержку тестирования для разных баз данных с помощью Django. Вы можете использовать его, если он служит вашей цели, в противном случае его можно использовать как ссылку в любом случае.

PyPi Ссылка: -

Django Test Addons

Документация: -

Python Hosted

Read the docs

+0

замечательный ответ, но, к сожалению, я не могу использовать этот пакет, поскольку он не поддерживает django 1.5. –

+1

Он может работать с django 1.5, так как в классе TestCase в django 1.6 не так много изменений, поэтому попробуйте. Процитировать из документации «Пакет может работать отлично для более старых версий, чем указано. Просто он не тестируется с ними. Поэтому не стесняйтесь попробовать». – hspandher

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 только, чтобы избежать какой-либо побочный эффект к основной базе данных.

+0

спасибо за предложение. Я уже это делаю. –

Смежные вопросы