gpt4 book ai didi

python - 如何在 Python 中模拟 redis 客户端?

转载 作者:太空狗 更新时间:2023-10-29 17:06:17 24 4
gpt4 key购买 nike

我刚刚发现一堆单元测试失败了,因为开发人员没有在测试中模拟对 redis 客户端的依赖。我正在努力解决这个问题,但我自己也有困难。

该方法写入redis 客户端:

redis_client = get_redis_client()
redis_client.set('temp-facility-data', cPickle.dumps(df))

稍后在断言中检索结果:

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()。

@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() 在代码中设置的值, 这样测试就会通过。

现在这条线没有通过测试:

res = cPickle.loads(get_redis_client().get('temp-facility-data'))
TypeError: must be string, not MagicMock

有什么建议吗?

最佳答案

认为您可以使用副作用在本地字典中设置和获取值

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

没有测试这个,但我认为它应该做你想要的

关于python - 如何在 Python 中模拟 redis 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30531291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com