Отключить декоратор кеша для тестирования на dogpile.cache

Я недавно переключился с мензурки на dogpile.cache. Это работает очень хорошо в живом коде, но я сталкиваюсь с проблемой с тестированием. Как отключить кеширование для тестирования?

Я сейчас пользуюсь

#caching.py
from dogpile.cache import make_region

region = make_region().configure(
    'dogpile.cache.redis',
    expiration_time = 3600,
    arguments = {
        'host': '127.0.0.1',
        'port': 6379
    }
)

#db.py
from .caching import region

@region.cache_on_arguments()
def fetch_from_db(item):
    return some_database.lookup(item)

Как поменять кеширование или отключить его для юнит-тестов?

2 ответа

Во время тестирования настройте dogpile для использования NullBackend, который является примером шаблона проектирования Null Object.

from dogpile.cache import make_region

region = make_region().configure(
    'dogpile.cache.null'
)

Переопределите ваш декоратор в функцию идентификации.

Т.е.

if __debug__:
    def dont_cache():
        def noop(f):
            return f
        return noop
    class Nothing:
        pass
    region = Nothing()
    region.cache_on_arguments = dont_cache
else:
    from .caching import region
Другие вопросы по тегам