首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Django中编写python用例模拟redis连接(redis.StrictRedis)

如何在Django中编写python用例模拟redis连接(redis.StrictRedis)
EN

Stack Overflow用户
提问于 2021-11-18 08:06:58
回答 1查看 661关注 0票数 1

如何模拟以下连接到Redis的函数?

代码语言:javascript
复制
import redis

class RedisCache:
    redis_instance = None

    @classmethod
    def set_connect(cls):
        redis_instance = redis.StrictRedis(host='0.0.0.0', port=6379, password='xyz', charset='utf-8', decode_responses=True, socket_timeout=30)
        return redis_instance

    @classmethod
    def get_conn(cls):
        cls.redis_instance = cls.set_connect()
        return cls.redis_instance

我寻找了一些解决方案,但它们基本上是使用fakeredis模块。我希望有一种更简单的方法来模拟这些函数。

注意-函数返回的数据:Redis<ConnectionPool<Connection<host=127.0.0.1,port=6379,db=0>>>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-03 03:06:26

您可以使用贴片()函数模拟redis.StrictRedis类。请参阅到补丁的地方

例如。

redis_cache.py

代码语言:javascript
复制
import redis


class RedisCache:
    redis_instance = None

    @classmethod
    def set_connect(cls):
        redis_instance = redis.StrictRedis(host='0.0.0.0', port=6379, password='xyz',
                                           charset='utf-8', decode_responses=True, socket_timeout=30)
        return redis_instance

    @classmethod
    def get_conn(cls):
        cls.redis_instance = cls.set_connect()
        return cls.redis_instance

test_redis_cache.py

代码语言:javascript
复制
from unittest import TestCase
import unittest
from unittest.mock import patch, Mock
from redis_cache import RedisCache


class TestRedisCache(TestCase):
    def test_set_connect(self):
        with patch('redis.StrictRedis') as mock_StrictRedis:
            mock_redis_instance = mock_StrictRedis.return_value
            actual = RedisCache.set_connect()
            self.assertEqual(actual, mock_redis_instance)
            mock_StrictRedis.assert_called_once_with(host='0.0.0.0', port=6379, password='xyz',
                                                     charset='utf-8', decode_responses=True, socket_timeout=30)

    @patch('redis.StrictRedis')
    def test_get_conn(self, mock_StrictRedis):
        mock_redis_instance = mock_StrictRedis.return_value
        RedisCache.get_conn()
        self.assertEqual(RedisCache.redis_instance, mock_redis_instance)


if __name__ == '__main__':
    unittest.main()

测试结果:

代码语言:javascript
复制
..
----------------------------------------------------------------------
Ran 2 tests in 0.004s

OK
Name                                             Stmts   Miss  Cover   Missing
------------------------------------------------------------------------------
src/stackoverflow/70016401/redis_cache.py           11      0   100%
src/stackoverflow/70016401/test_redis_cache.py      18      0   100%
------------------------------------------------------------------------------
TOTAL                                               29      0   100%
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70016401

复制
相关文章

相似问题

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