Использование постоянной базы данных в Django unittests

У меня есть большая база данных Wordnet PostgreSQL для чтения, которую я хотел бы использовать из Django unittests. В частности, у меня есть приложение, называемое «wordnet», которое обертывает эту базу данных Wordnet. К сожалению, по умолчанию Django unittest framework использует пустую базу данных SQLite в памяти для всех приложений.

Как использовать мою базу данных PostgreSQL только для приложения wordnet и других приложений в рамках unittests?

Я знаком с маршрутизаторами базы данных Django , и я думаю, что они могут быть решением. Поэтому я создал следующее в моем routers.py:

NEEDS_REAL_DB_APPS = ( 'wordnet', 'auth', 'contenttypes', ) REAL_DB = 'default' class UseRealDBRouter(object): def db_for_read(self, model, **hints): if model._meta.app_label in NEEDS_REAL_DB_APPS: return REAL_DB return None def db_for_write(self, model, **hints): if model._meta.app_label in NEEDS_REAL_DB_APPS: return REAL_DB return None def allow_relation(self, obj1, obj2, **hints): if obj1._meta.app_label in NEEDS_REAL_DB_APPS and obj2._meta.app_label in NEEDS_REAL_DB_APPS: return True return None def allow_syncdb(self, db, model): if db == REAL_DB: return model._meta.app_label in NEEDS_REAL_DB_APPS elif model._meta.app_label in NEEDS_REAL_DB_APPS: return False return None 

И мой test.py выглядит так:

 from django.test import TestCase from wordnet import models as wn_models class Tests(TestCase): def test_wordnet(self): q = wn_models.Word.objects.all() self.assertEqual(q.count(), 86547) 

Однако, когда я запускаю свой unittest (например, manage.py test myapp.Tests.test_wordnet ), проверка по-прежнему не выполняется, возвращая 0 для подсчета всех слов, указывая, что она по-прежнему не использует «настоящую» базу данных. Что я делаю не так?

Вы не должны использовать настоящую базу данных для тестирования.

Как насчет первого сброса вашей производственной базы данных: посмотрите здесь

а затем загрузите его в тестовые приспособления: проверьте это