python Django仿可可树

2024-09-27 07:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的设置.py,我已将缓存指定为:

 CACHES = {
    'default': {
     ......
   }
}

在我的视图.py,我有

^{pr2}$

现在在我的测试.py,我可以嘲笑请求.get('aurl'),以确保不发出外部请求。在

但是测试代码仍然会命中缓存并从中获取/设置。所以如果我的prod已经设置了缓存,那么test失败了,因为它从同一个缓存中获取数据。或者,如果我先运行测试,那么测试用例使用测试数据设置缓存,我在运行prod website时看到了同样的情况。在

我怎么能嘲笑

get_cache('default').set('key', result) 

以及

get_cache('default').get('key') 

因此set调用不设置实际缓存(return None?)而get不返回实际缓存中的任何内容。在

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

以下是我如何嘲笑我的请求.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语句并不能打印出任何东西,这让我觉得它没有被恰当地嘲笑


Tags: keypytestselfdefaulturlcacheget
1条回答
网友
1楼 · 发布于 2024-09-27 07:31:17

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

  • 重写测试用例中的设置,请参见docs
  • 正在检查测试时要使用的缓存后端设置.py公司名称:

    CACHES = ...
    if 'test' in sys.argv:
        CACHES['default'] = {'BACKEND': 'django.core.cache.backends.dummy.DummyCache',}
    
  • 有独立的设置.py用于测试
  • 嘲弄,看看如何做的好article

希望有帮助。在

相关问题 更多 >

    热门问题