在Django更容易使用伪造品。
django-fakeredis的Python项目详细描述
在Django更容易使用fakeredis。
安装
pip install django-fakeredis
为什么要用它?
我经历了很多次在测试中发现由多个fakeredis实例引起的bug。 我们只想在一个redis服务器和不同连接上使用像redis这样的fakerredis,并且可以在redis中使用monitor命令进行调试
特点:
- 一个fakeredis服务器,具有多个连接,用于像使用redis这样的测试。
- 将覆盖设置合并到本地内存和伪get_redis_connection,django's cache
- 要禁用传递env的伪操作:“nofake_redis=1”
NOFAKE_REDIS=1 python manage.py test
在使用django_fakeredis
之前,您的测试代码可能是这样的:
server=fakeredis.FakeServer()@override_settings(CACHES={"default":{"BACKEND":"django.core.cache.backends.dummy.DummyCache"}})@patch('foo.get_redis_connection',fakeredis.FakeRedis(server=server)deftest_sth():....
现在您可以:
@FakeRedis("yourpath.get_redis_connection")deftest_sth():...
使用量
fromdjango_fakeredisimportFakeRedis@FakeRedis("yourpath.get_redis_connection")deftest_foo():...
fromdjango_fakeredisimportFakeRediswithFakeRedis("yourpath.get_redis_connection"):foo()
fromdjango_fakeredisimportFakeRediswithFakeRedis("yourpath.cache"):foo()
注意
- 如果您想用fakeredis模拟
django.core.cache.cache
,django fakeredis只需将缓存设置覆盖到Local-Memory中以使用内部转换。所以django.cache和get redis连接有两个模拟的redis实例。
如果您想使用更多的redis命令,比如:sets,list…,您可能需要使用django_redis,并手动转换结果。
django.cache:
from django.core.cache import cache
cache.set("key", 2)
assert cache.get("key") == 2
您必须手动铸造,当直接使用Fakeredis或Django廑u Redis时,您必须手动铸造:
import fakeredis
con = fakeredis.FakeStrictRedis()
con.set("key", 2)
assert con.get("key").decode('utf8') == "2"
- 如果您有一个mock不工作的问题,您可能应该看到where to patch