在测试中覆盖Django缓存设置

时间:2015-10-01 08:59:52

标签: python django caching testing django-settings

我在我的测试中使用Django DummyCache,然而,有一些测试可以继续实际缓存,所以使用虚假缓存在这里并不好。

是否有一种干净的方法可以覆盖某个模块或范围的常规Django settings?最好使用Python decorator

我正在使用Django版本1.8.4

2 个答案:

答案 0 :(得分:9)

看看https://docs.djangoproject.com/en/1.8/topics/testing/tools/#overriding-settings 您可以使用装饰器override_settings

from django.test import TestCase, override_settings

class MyTestCase(TestCase):

    @override_settings(CACHES=...)
    def test_something(self):
        ....

答案 1 :(得分:6)

是的,可以覆盖设置。来自Django documentation: Testing

  

出于测试目的,临时更改设置并在运行测试代码后恢复为原始值通常很有用。对于这个用例,Django提供了一个标准的Python上下文管理器... settings(),可以像这样使用:

from django.test import TestCase

class LoginTestCase(TestCase):
    def test_login(self):
        # Override the LOGIN_URL setting
        with self.settings(CACHES={'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}):
            response = self.client.get(...)

我已经使用其他几个设置测试了上述方法,但没有使用特定的缓存设置,但这是一般的想法。

编辑(@Alasdair学分):

重新设置特定设置覆盖,可在文档中找到以下警告:

  

更改CACHES设置是可能的,但如果您使用使用缓存的内部结构(例如django.contrib.sessions),则有点棘手。例如,您必须在使用缓存会话和覆盖CACHES的测试中重新初始化会话后端。