Я использую следующий декоратор кэшировать чисто функция возвращает:Как очистить кеш memoize?
def memoize(obj):
cache = obj.cache = {}
@functools.wraps(obj)
def memoizer(*args, **kwargs):
if args not in cache:
cache[args] = obj(*args, **kwargs)
return cache[args]
return memoizer
Она работает довольно хорошо, но я бегу в проблему с юнит-тестов, таких как это:
class TestFoo(unittest.TestCase):
def setUp(self):
# clear the cache here
pass
@patch('module1.method1')
def test_method1_1(self, method1):
method1.return_value = ""
d = module1.method2()
self.assertTrue(len(d) == 0)
@patch('module1.method1')
def test_method1_2(self, method1):
method1.return_value = "TEST1234"
d = module1.method2()
self.assertTrue(len(d) == 2)
Моя проблема заключается в том, что module1.method1
украшен memoize
, поэтому из одного теста в другое его возвращаемое значение кэшируется и не изменяется с последующими method1.return_value = "..."
заданиями.
Как можно очистить кеш memoize? Когда я это выясню, я очистил кеш в методе setUp тестового примера.