0

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

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 ......

4

2 回答 2

1

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

但是,至于为什么你必须添加一个额外的数据库引擎来让你的测试通过,我不能说。在 1.4 的发行说明中绝对没有提到这一点,这听起来不像 Django 需要的那样。这可能是一个错误(1.4 目前仅处于候选发布阶段,因此它肯定存在错误),但如果没有额外的确认,就无法知道。

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

于 2012-03-07T15:11:44.307 回答
1

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

当然,在正常运行的情况下,您永远不需要运行 Django 自己的单元测试。只有当你真正为 Django 本身做贡献时,你才会这样做。您应该依靠它们已经通过的事实,并且只测试您自己的代码,而不是 Django。

于 2012-03-07T15:13:14.537 回答