How to mock a redis client in Python?(如何在 Python 中模拟 redis 客户端?)
问题描述
我刚刚发现一堆单元测试失败了,因为开发人员没有在测试中模拟出对 redis 客户端的依赖.我正在努力解决这个问题,但我自己也遇到了困难.
I just found that a bunch of unit tests are failing, due a developer hasn't mocked out the dependency to a redis client within the test. I'm trying to give a hand in this matter but have difficulties myself.
该方法写入一个redis客户端:
The method writes to a redis client:
redis_client = get_redis_client()
redis_client.set('temp-facility-data', cPickle.dumps(df))
稍后在断言中检索结果:
Later in the assert the result is retrieved:
res = cPickle.loads(get_redis_client().get('temp-facility-data'))
expected = pd.Series([set([1, 2, 3, 4, 5])], index=[1])
assert_series_equal(res.variation_pks, expected)
我成功地修补了redis客户端的get()和set().
I managed to patch the redis client's get() and set() successfully.
@mock.patch('redis.StrictRedis.get')
@mock.patch('redis.StrictRedis.set')
def test_identical(self, mock_redis_set, mock_redis_get):
mock_redis_get.return_value = ???
f2 = deepcopy(self.f)
f3 = deepcopy(self.f)
f2.pk = 2
f3.pk = 3
self.one_row(f2, f3)
但我不知道如何将 get()
的 return_value
设置为 set()
将在代码中设置的值,以便测试通过.
but I don't know how to set the return_value
of get()
to what the set()
would set in the code, so that the test would pass.
现在这条线没有通过测试:
Right now this line fails the test:
res = cPickle.loads(get_redis_client().get('temp-facility-data'))
TypeError: must be string, not MagicMock
有什么建议吗?
推荐答案
认为你可以使用副作用在本地字典中设置和获取值
Think you can use side effect to set and get value in a local dict
data = {}
def set(key, val):
data[key] = val
def get(key):
return data[key]
mock_redis_set.side_effect = set
mock_redis_get.side_effect = get
未对此进行测试,但我认为它应该可以满足您的需求
not tested this but I think it should do what you want
这篇关于如何在 Python 中模拟 redis 客户端?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在 Python 中模拟 redis 客户端?


基础教程推荐
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- 求两个直方图的卷积 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 包装空间模型 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01