在我的settings.py文件中,我指定了缓存如下:
现在,在我的tests.py中,我已经能够模拟requests.get('aurl'),这可以确保不进行任何外部请求。
但是测试代码仍然会访问缓存并从中获取/设置内容。因此,如果生产环境已经设置了缓存,那么测试将失败,因为它从同一个缓存中获取数据。或者,如果我先运行我的测试,那么测试用例将使用测试数据设置缓存,并且当我运行生产网站时,我会看到相同的结果。
如何模拟对...的调用?
我应该在此添加哪些代码才能使其工作?我尝试过类似以下的代码
但它无法正常工作,在 get/set 函数中添加打印语句并没有输出任何内容,这让我认为它没有被正确地模拟。
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'),这可以确保不进行任何外部请求。
但是测试代码仍然会访问缓存并从中获取/设置内容。因此,如果生产环境已经设置了缓存,那么测试将失败,因为它从同一个缓存中获取数据。或者,如果我先运行我的测试,那么测试用例将使用测试数据设置缓存,并且当我运行生产网站时,我会看到相同的结果。
如何模拟对...的调用?
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 函数中添加打印语句并没有输出任何内容,这让我认为它没有被正确地模拟。