在我的settings.py,我指定我的缓存为:蟒蛇Django的模拟缓存
CACHES = {
'default': {
......
}
}
在我的views.py,我有
import requests
from django.core.cache import cache, get_cache
def aview():
#check cache
if not get_cache('default').get('key'):
#make request and save in cache
result = request.get('some_url')
get_cache('default').set('key', result)
return result
else:
return get_cache('default').get('key')
现在在我的tests.py,我已经能够模拟requests.get('aurl'),以确保没有外部请求。
但测试代码仍然命中缓存并从中获取/设置。因此,如果我的产品已经设置了缓存,则测试失败,因为它从相同的缓存中获取数据。或者如果我先运行我的测试,那么测试用例就是使用测试数据设置缓存,而当我运行prod网站时,我会看到相同的结果。
我如何可以模拟到
get_cache('default').set('key', result)
和
get_cache('default').get('key')
的呼叫,使得该组的呼叫不设置真正的高速缓存(返回None?),并得到实际不返回任何东西缓存。
请向我提供代码示例以了解如何完成此操作。
这里是我是如何嘲笑我requests.get
def test_get_aview(self):
with mock.patch('requests.get') as mymock:
mymock.side_effect = (lambda url: MOCKED_DATA[url])
我可以在此之后放什么代码,使其工作?我想是这样
class MockCacheValue(mock.MagicMock):
def get(self, key):
print 'here'
return None
def set(self, key, value):
print 'here 2'
pass
def test_get_aview(self):
with mock.patch('requests.get') as mymock:
mymock.side_effect = (lambda url: MOCKED_DATA[url])
mock.patch('django.core.cache.get_cache', new=MockCacheValue)
,但它不工作,并把里面的get /上述设置不打印任何打印语句给我一个想法,它不能正常嘲笑
为什么在生产机器上运行测试? – 2013-04-06 17:02:25
@ kashif,为什么不在运行时使用[dummy cache](https://docs.djangoproject.com/zh/dev/topics/cache/?from=olddocs/#dummy-caching-for-development)测试? – alecxe 2013-04-06 18:55:54
@Alexander,上面在我的实际代码中使用的缓存是文件系统https://docs.djangoproject.com/zh/dev/topics/cache/?from=olddocs/#filesystem-caching。在运行我的测试用例时,如何在'默认'缓存中为'BACKEND'指定另一个值,并确保views.py中的实际代码访问基于文件系统? – kk1957 2013-04-06 19:03:55