如何用fakeredis-py测试redis.asyncio的action_base_result函数
解决fakeredis-py测试全局Redis依赖函数的问题
问题本质是你创建的fakeredis连接池没有替换掉action_base_result函数依赖的全局redis_pool变量,导致函数内部调用的仍是未初始化的None,从而触发AttributeError。以下是无需修改原函数参数的解决方案:
方案1:直接替换全局变量
假设你的业务代码结构如下:
# business_module.py redis_pool = None def create_redis_pool(): global redis_pool # 真实Redis初始化逻辑 import redis redis_pool = redis.ConnectionPool(host="localhost", port=6379) def action_base_result(arg1, arg2): with redis_pool.pipeline() as pipe: # 业务逻辑示例 pipe.set(f"key_{arg1}", arg2) pipe.execute()
测试时直接导入全局redis_pool并替换为fakeredis的连接池:
# test_business.py import fakeredis from business_module import action_base_result, redis_pool def test_action_base_result(): # 创建fakeredis连接池 fake_pool = fakeredis.ConnectionPool() # 替换全局redis_pool business_module.redis_pool = fake_pool # 执行测试 action_base_result("test_id", "test_value") # 验证Redis操作结果 fake_client = fakeredis.Redis(connection_pool=fake_pool) assert fake_client.get("key_test_id") == b"test_value"
方案2:用pytest monkeypatch优雅替换(推荐)
使用pytest的monkeypatch工具可以避免测试后污染全局变量,更适合自动化测试场景:
# test_business.py import fakeredis import pytest from business_module import action_base_result def test_action_base_result(monkeypatch): # 创建fakeredis连接池 fake_pool = fakeredis.ConnectionPool() # 替换全局redis_pool变量 import business_module monkeypatch.setattr(business_module, "redis_pool", fake_pool) # 执行测试逻辑 action_base_result("test_id", "test_value") # 验证操作 fake_client = fakeredis.Redis(connection_pool=fake_pool) assert fake_client.get("key_test_id") == b"test_value"
额外注意事项
- 如果测试过程中可能触发
create_redis_pool函数(它会重新赋值全局redis_pool),需要同时mock该函数:def test_action_base_result(monkeypatch): fake_pool = fakeredis.ConnectionPool() monkeypatch.setattr(business_module, "redis_pool", fake_pool) # 拦截create_redis_pool,防止覆盖fake_pool def mock_create_pool(): business_module.redis_pool = fake_pool monkeypatch.setattr(business_module, "create_redis_pool", mock_create_pool) # 执行测试 action_base_result("test_id", "test_value") - 确保测试前全局
redis_pool未被真实初始化,否则需要先重置为None再替换。
内容的提问来源于stack exchange,提问作者ooghry
相关产品推荐
相关产品推荐

