Модульный тест django 1.4c1 ищет «другую» базу данных - PullRequest
0 голосов
/ 07 марта 2012

Для того, чтобы пройти модульные тесты, работающие на новой установке транка django (1.4c1), необходимо добавить в базу данных «dummy» 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'
    }
}

Почему это так, и какова цель этой функции "sure_defaults" в классе ConnectionHandler django / db / utils.py?

Просто любопытно понять Джанго на более глубоком уровне ...

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Если вы запускаете собственные модульные тесты Django, это означает, что вы хотите протестировать сам Django. Одним из элементов самого Django является поддержка нескольких баз данных - так что, неестественно, встроенные тесты проверяют поддержку multi-db. Чтобы это проверить, вам нужно настроить несколько баз данных.

Конечно, при нормальных условиях вам никогда не понадобится запускать собственные модульные тесты Django. Вы бы сделали это, только если бы вы внесли свой вклад в сам Джанго. Вы должны полагаться на то, что они уже пройдены, и просто протестировать свой собственный код, а не Django.

1 голос
/ 07 марта 2012

Django 1.4 добавляет новый подкласс TestCase с именем SimpleTestCase, который позволяет запускать тесты, не требующие подключения к базе данных. Я предполагаю, что django.db.backends.dummy используется как база данных по умолчанию в этом сценарии, так как ensure_defaults устанавливает ее как базу данных, если база данных не указана.

Однако я не могу сказать, почему вам нужно добавить дополнительный механизм базы данных для прохождения ваших тестов. В примечаниях к выпуску 1.4 нет абсолютно никакого упоминания об этом, и это не звучит так, как того требует Django. Вполне возможно, что это может быть ошибкой (сейчас версия 1.4 находится только на стадии подготовки к выпуску, поэтому, безусловно, она открыта для ошибок), но без дополнительного подтверждения узнать об этом невозможно.

Я сейчас не в состоянии проверить это сам, но попробую позже сегодня.

...