在我的settings.py中,我将缓存指定为:
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已经设置了缓存,那么测试将失败,因为它从相同的缓存中获取数据。或者,如果我首先运行测试,那么测试用例将使用测试数据设置缓存,当我运行prod website时,我会看到这一点。
我如何模拟调用到
get_cache('default').set('key', result) 和
get_cache('default').get('key') 这样set调用就不会设置实际的缓存(返回None?)get不返回实际缓存中的任何内容。
请为我提供代码样本,如何做到这一点。
下面是我如何嘲笑我的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/set中放入print语句没有打印任何东西,这让我觉得它没有被正确地模拟
发布于 2013-04-07 03:24:13
我认为您应该在运行测试时使用dummy cache,方法如下:
在测试用例中,请参见docs
缓存= ...if‘testing
‘’default‘= {'BACKEND':
希望这能有所帮助。
https://stackoverflow.com/questions/15853582
复制相似问题