【发布时间】:2011-11-04 16:54:57
【问题描述】:
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 设置设置正确(其中只有“我”)。任何想法为什么会发生这种情况?以下是<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,这样无论是在本地运行还是在生产环境中运行,测试都能通过。
有什么想法吗?
【问题讨论】: