【发布时间】:2015-05-02 05:10:03
【问题描述】:
我尝试对我的 Django 程序进行单元测试,我想检查我的 settings.py 文件中几个变量的几个值。
在文档中,“Overriding settings”部分描述了一种方法。但是,尽管我进行了所有尝试,但在测试运行时,我仍然无法在程序中提供更改。以下是我在一个最小示例上所做的总结:
首先,新建一个项目:
$ pyvenv virtualenv
$ cd virtualenv/
$ . bin/activate
(virtualenv) $ pip install django
(virtualenv) $ django-admin startproject myapp
(virtualenv) $ cd myapp/
然后,添加以下文件。
文件settings.py
...
TEST_VALUE = 'a'
文件tests.py
from django.test import TestCase
from myapp.settings import TEST_VALUE
class CheckSettings(TestCase):
def test_settings(self):
self.assertEqual(TEST_VALUE, 'a')
def test_modified_settings(self):
with self.settings(TEST_VALUE='b'):
self.assertEqual(TEST_VALUE, 'b')
当我运行测试时,我得到以下信息:
$ ./manage.py test
Creating test database for alias 'default'...
F.
======================================================================
FAIL: test_modified_settings (myapp.tests.CheckSettings)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/virtualenv/myapp/tests.py", line 12, in test_modified_settings
self.assertEqual(TEST_VALUE, 'b')
AssertionError: 'a' != 'b'
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (failures=1)
Destroying test database for alias 'default'...
您可能已经注意到,TEST_VALUE 的原始值为'a',我尝试通过self.settings(TEST_VALUE='b') 对其进行修改...但是没有成功。
你可以通过一个空项目(Django 是 1.6.5)来尝试。
那么,为了让它正常工作,我缺少什么?
【问题讨论】:
-
只是猜测,但也许您必须通过
settings访问设置——例如from testing_settings import settings,然后在你的断言中使用settings.TEST_VALUE。更改已导入的值似乎有点太神奇了。 -
实际上是
from django.conf import settings。 -
@IsmailBadawi:该死,你是对的!!!总结一下,我是通过
from myapp.settings import TEST_VALUE从settings.py文件中获取变量,但实际上我应该像from django.conf import settings然后settings.TEST_VALUE那样做...谢谢你的提示!它帮助很大。 -
另外,请注意有一个
modify_settings()装饰器。 docs.djangoproject.com/en/1.9/topics/testing/tools/…
标签: python django unit-testing django-settings