首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python django模拟缓存

python django模拟缓存
EN

Stack Overflow用户
提问于 2013-04-07 00:59:28
回答 1查看 6.9K关注 0票数 4

在我的settings.py中,我将缓存指定为:

代码语言:javascript
运行
复制
 CACHES = {
    'default': {
     ......
   }
}

在我的views.py中,我有

代码语言:javascript
运行
复制
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时,我会看到这一点。

我如何模拟调用到

代码语言:javascript
运行
复制
get_cache('default').set('key', result) 

代码语言:javascript
运行
复制
get_cache('default').get('key') 

这样set调用就不会设置实际的缓存(返回None?)get不返回实际缓存中的任何内容。

请为我提供代码样本,如何做到这一点。

下面是我如何嘲笑我的requests.get的

代码语言:javascript
运行
复制
def test_get_aview(self):
    with mock.patch('requests.get') as mymock:
        mymock.side_effect = (lambda url: MOCKED_DATA[url])

在此之后,我可以放入什么代码来使其工作?我试过这样的东西

代码语言:javascript
运行
复制
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语句没有打印任何东西,这让我觉得它没有被正确地模拟

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-07 03:24:13

我认为您应该在运行测试时使用dummy cache,方法如下:

在测试用例中,请参见docs

  • checking what

  • to use what cache backend to testing right in settings.py:

缓存= ...if‘testing

  • mocking,’in sys.argv:

‘’default‘= {'BACKEND':

  • }

  • 具有单独的sys.argv测试请参阅good article,了解如何使用

希望这能有所帮助。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15853582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档