Проверьте, кэширована ли функция / регион в Beaker/Dogpile
Используя модули Python Beaker или Dogpile для кеширования, можно ли проверить, присутствует ли область с определенным значением ключа в кеше или нет?
1 ответ
Допустим, у вас есть метод, который кэшируется с помощью beaker:
@cache_region('foo_term')
def cached_method(bar):
return actual_method(bar)
Затем в вашем тесте вы можете пропатчить method_to_test и утверждать, что он называется / не вызывается:
def test_cache():
with patch('package.module.actual_method') as m:
cached_method(foo)
assert m.call_args_list = [call(foo)] # Asserting it is not cached the first time
cached_method(foo)
assert m.call_args_list = [call(foo)] # Now asserting it is cached
cached_method(bar)
assert m.call_args_list = [call(foo), call(bar)] # asserting `bar' is not cached
Обратите внимание, что вы должны обернуть метод, который вы хотите кэшировать, в "кэшированную" версию функции и поместить декоратор кэша мензурки в кэшированную версию. Если, конечно, вы не найдете способ сделать patch
работает с этой черной магией.