数据库
首页 > 数据库> > python – 在Django单元测试中使用持久数据库

python – 在Django单元测试中使用持久数据库

作者:互联网

我有一个大型的只读Wordnet PostgreSQL数据库,我想从Django单元测试中使用它.具体来说,我有一个名为“wordnet”的应用程序,它包装了这个Wordnet数据库.不幸的是,默认的Django unittest框架为所有应用程序使用了一个空的内存中SQLite数据库.

如何在单元测试中使用我的PostgreSQL数据库仅用于wordnet应用程序,而不使用其他应用程序?

我熟悉Django database routers,我认为它们可能是一个解决方案.所以我在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

我的tests.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表示所有单词的计数,表明它仍然没有使用“真实”数据库.我究竟做错了什么?

解决方法:

您不应该使用真实数据库进行测试.

首先转储生产数据库怎么样:看here

然后将其加载到测试夹具中:检查this

标签:python,database,django,django-models,wordnet
来源: https://codeday.me/bug/20190704/1375531.html