在测试中覆盖Django缓存设置

For*_*rge 5 python testing django caching django-settings

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

是否有一种干净的方法来覆盖Django settings某个模块或范围的常规?优选使用a Python decorator.

我正在使用 Django版本1.8.4.

sin*_*nsv 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):
        ....
Run Code Online (Sandbox Code Playgroud)


Wto*_*wer 6

是的,可以覆盖设置.来自Django文档:测试:

出于测试目的,临时更改设置并在运行测试代码后恢复为原始值通常很有用.对于这个用例,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(...)
Run Code Online (Sandbox Code Playgroud)

我自己用其他几个设置测试了上面的方法,但没有使用特定的缓存设置,但这是一般的想法.

编辑(@Alasdair学分):

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

改变CACHES设置是可能的,但如果你使用内部使用缓存,有点麻烦django.contrib.sessions.例如,您必须在使用缓存会话和覆盖的测试中重新初始化会话后端CACHES.

  • 覆盖`CACHES`设置应该在大多数情况下都能正常工作,但有时你可能会遇到问题.文档中有[警告](https://docs.djangoproject.com/en/1.8/topics/testing/tools/#django.test.modify_settings). (2认同)