为了传递在全新安装的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 ......
答案 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。