【问题标题】:Override Django cache settings in tests在测试中覆盖 Django 缓存设置
【发布时间】:2015-12-29 06:18:36
【问题描述】:

我在测试中使用Django DummyCache,但是,有一些测试依赖于真实缓存,因此在这里使用假缓存并不好。

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

我正在使用Django 版本1.8.4

【问题讨论】:

    标签: python django caching testing django-settings


    【解决方案1】:

    是的,可以覆盖设置。来自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 的测试中重新初始化会话后端。

    【讨论】:

    • 覆盖CACHES 设置在大多数情况下应该可以工作,但有时您可能会遇到问题。文档中有a warning
    【解决方案2】:

    看看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):
            ....
    

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 1970-01-01
      • 2016-03-25
      • 2022-10-04
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      相关资源
      最近更新 更多