我尝试对我的Django程序进行单元测试,并想要检查
在文档中,"覆盖设置"部分描述了一种实现方式。但是,尽管我尝试了很多次,我仍然无法在测试运行时使更改生效。以下是我在最小示例上所做的摘要:
首先,创建一个新项目:
然后,添加以下文件。文件
文件
当我运行测试时,我得到了以下结果:
settings.py
文件中几个变量的多个值。在文档中,"覆盖设置"部分描述了一种实现方式。但是,尽管我尝试了很多次,我仍然无法在测试运行时使更改生效。以下是我在最小示例上所做的摘要:
首先,创建一个新项目:
$ 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
。改变你已经导入的值似乎有点太神奇了。 - Ismail Badawifrom django.conf import settings
。 - Ismail Badawifrom myapp.settings import TEST_VALUE
从settings.py
文件中获取变量的,但实际上我应该这样做:from django.conf import settings
,然后使用settings.TEST_VALUE
...感谢你的提示!它帮了我很多忙。 - perrormodify_settings()
装饰器。https://docs.djangoproject.com/en/1.9/topics/testing/tools/#django.test.modify_settings - Chemical Programmer