在我的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