• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

在 Python 模拟 redis 客户端?

用户头像
it1352
帮助2

问题说明

我刚刚发现一堆单元测试失败了,因为开发人员没有在测试中模拟出对 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

有什么建议吗?

正确答案

#1

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

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /reply/detail/tangibhgf
系列文章
更多 icon
同类精品
更多 icon
继续加载