我有一个基于Django REST框架SimpleRateThrottle的自定义Throttling类,我想用pytest测试我的自定义类。由于我的默认测试设置使用DummyCache,我想只为这个特定的测试模块切换到LocMemCache(SimpleRateThrottle使用缓存后端来跟踪计数)。有没有办法切换缓存后端只是选择性测试?设置夹具中的settings.CACHE似乎不起作用。我也试过在SimpleRateThrottle中模拟default_cache,但我无法正确使用它。
* * * * *
| | | | |
| | | | |
| | | | +---- Day of the Week (range: 1-7 or 0-6, 7/0 = Sunday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month (range: 1-31)
| +---------- Hour (range: 0-23)
+------------ Minute (range: 0-59)
from rest_framework.throttling import SimpleRateThrottle
class NaiveThrottler(SimpleRateThrottle):
...
答案 0 :(得分:2)
Django为此提供了override_settings
and modify_settings
装饰器。如果您只想为一个测试更改CACHES
设置,则可以执行以下操作:
from django.test import TestCase, override_settings
class MyTestCase(TestCase):
@override_settings(CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
}
})
def test_chache(self):
# your test code
答案 1 :(得分:2)
虽然Django提供的函数/装饰器可以工作,但pytest-django
提供了fixture for changing settings for a test。为了更好地遵循pytest
using fixtures for tests的范例,最好更改特定于测试的设置,如下所示:
import pytest
def test_cache(settings):
settings.CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
}
}
# test logic here