django 1.4c1单元测试寻找'其他'数据库

时间:2012-03-07 14:24:17

标签: django django-unittest

为了传递在全新安装的django trunk(1.4c1)上运行的单元测试,需要在settings.py中添加一个'虚拟'other数据库,如下所示: -

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'mydb',                      # Or path to database file if using sqlite3.
        'USER': 'myuser',                      # Not used with sqlite3.
        'PASSWORD': 'mypassword',                  # Not used with sqlite3.
        'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '5432',                      # Set to empty string for default. Not used with sqlite3.
    },
    # dummy sqlite3 database created to pass django's builtin unit tests
    'other': {
        'ENGINE': 'django.db.backends.sqlite3'
    }
}

为什么这样,在django / db / utils.py的ConnectionHandler类中这个“ensure_defaults”函数的目的是什么?

只是好奇地了解更深层次的django ......

2 个答案:

答案 0 :(得分:1)

Django 1.4添加了一个名为TestCase的新SimpleTestCase子类,它允许您运行不需要数据库连接的测试。我的猜测是django.db.backends.dummy在这种情况下被用作一种默认数据库,因为如果没有指定数据库,ensure_defaults将其设置为数据库。

但是,至于为什么你必须添加一个额外的数据库引擎来让你的测试通过,我不能说。在1.4的发行说明中绝对没有提到这一点,并且听起来不像Django所要求的那样。这可能是一个错误(1.4现在只在发布候选阶段,所以它肯定对错误开放),但没有额外的确认,没有办法知道。

我现在无法自己测试,但我会在今天晚些时候尝试。

答案 1 :(得分:1)

如果您正在运行Django自己的单元测试,那意味着您要测试Django本身。 Django本身的一个要素是多数据库支持 - 因此,不是不自然,内置测试测试多数据库支持。为了测试它,您需要配置多个数据库。

当然,在正常运行的事情中,你永远不需要运行Django自己的单元测试。如果你真的为Django本身做贡献,你只会这样做。你应该依赖它们已经通过的事实,只测试你自己的代码,而不是Django。