使用本地设置进行Django测试
问题内容:
Python 2.7 Django 1.2
我在测试Django应用程序时出现奇怪的local_settings行为。我有这样的<project>/settings.py
设置:
DEBUG = False
TEMPLATE_DEBUG = DEBUG
ADMINS = (
("Me", "me@me.com"),
)
MANAGERS = ADMINS + (('Person1', 'person1@blah.com'),)
# ... rest of settings
try:
from local_settings import *
except ImportError:
pass
并且<project>/local_settings.py
我有:
DEBUG = True
MANAGERS = (
('Me', 'me@me.com'),
)
因此,在本地工作时,MANAGERS
设置应为(('Me', 'me@me.com'),)
,并且DEBUG
应设置为True
。
但是,在我的一个应用程序的测试中,我正在测试settings.DEBUG
并获取False
,但MANAGERS
设置设置正确(其中仅包含“
Me”)。任何想法为什么会发生这种情况?这是<project>/<app>/tests.py
文件的相关部分:
from django.conf import settings
from django.test import TestCase
# ...
class MyTests(TestCase):
def mytest(self):
if settings.DEBUG:
self.assertEqual(settings.MANAGERS, (('Me', 'me@me.com'),))
else:
self.assertEqual(settings.MANAGERS, (('Me', 'me@me.com'), ('Person1', 'person1@blah.com')))
结果是
AssertionError: (('Me', 'me@me.com'),) != (('Me', 'me@me.com'), ('Person1', 'person1@blah.com'))
因此,else
由于settings.DEBUG
设置不正确,似乎正在测试分支,然后AssertionError
由于settings.MANAGERS
设置正确而引发。
如果我跑步,python manage.py shell
我会得到:
>>> from django.conf import settings
>>> settings.DEBUG
True
>>> settings.MANAGERS
(('Me', 'me@me.com'),)
因此它们在那里正确设置。
我知道我可以在测试中手动覆盖设置,但是我想尝试使用它,settings.DEBUG
以便无论是在本地运行还是在生产中运行测试都可以通过。
有任何想法吗?
问题答案:
这是Django中的故意选择:
无论配置文件中DEBUG设置的值如何,所有Django测试都将以DEBUG = False运行。这是为了确保观察到的代码输出与生产设置中看到的输出匹配。
参考:https : //docs.djangoproject.com/en/dev/topics/testing/#other-test-
conditions