2012-03-07 45 views
0

为了通过在新安装的django中继(1.4c1)上运行的单元测试,需要在settings.py中添加一个'dummy'other数据库,像这样: -django 1.4c1单元测试寻找'其他'数据库

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的在更深的层次......

回答

1

的Django 1.4增加了TestCase一个新的子类,称为SimpleTestCase,它允许您运行不需要数据库连接测试。我的猜测是,django.db.backends.dummy被用作此场景中的一种默认数据库,因为ensure_defaults将此设置为数据库(如果未指定数据库)。

但是,至于为什么你必须添加一个额外的数据库引擎来让你的测试通过,我不能说。在1.4的发行说明中绝对没有提到这个,它听起来不像Django需要的东西。这可能是一个错误(1.4版仅在发布候选版本中,因此它肯定对漏洞开放),但没有额外的确认,就无法知道。

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

+0

是的,这是一个错误。请参阅http://groups.google.com/group/django-developers/browse_thread/thread/e30a9dcc5685954c/5cff8b0e820c1958?show_docid=5cff8b0e820c1958 – 2012-03-07 23:33:34

1

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

当然,在正常运行的情况下,您永远不需要运行Django自己的单元测试。如果你真的对Django本身做出贡献,你只会这么做。你应该依靠他们已经通过的事实,只测试你自己的代码,而不是Django。

+0

是的。我理解那部分关于不需要关心django自己的单元测试。我只是好奇django的内部工作,这就是为什么我要检查这个小问题。如果我可以帮助解决在Django中被破解的问题,我并不打算这么做,我会乐于这样做。这是一个错误 - http://groups.google.com/group/django-developers/browse_thread/thread/e30a9dcc5685954c/5cff8b0e820c1958?show_docid=5cff8b0e820c1958 – 2012-03-07 23:34:54