10
我剛剛發現一堆單元測試失敗了,因爲開發者沒有在測試中嘲笑對redis客戶端的依賴。我試圖在這件事情上伸出援手,但自己也有困難。如何在Python中模擬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()和()設置成功。
@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
有什麼建議嗎?
使用'side_effect'與共享的對象是在集合'side_effect'中設置並返回'side_effect'? https://docs.python.org/3/library/unittest.mock.html#quick-guide – user3012759