我只是发现,由于开发人员并未在测试中嘲笑对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)
但我不知道如何设置return_value
的get()
,以什么样的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
没有测试过,但我认为它应该做你想要的
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句