【发布时间】:2015-04-28 11:43:05
【问题描述】:
我使用以下装饰器来缓存纯函数返回:
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 方法中清除缓存。
【问题讨论】:
标签: python unit-testing caching