2015-05-29 9 views
10

मुझे अभी पता चला है कि यूनिट परीक्षणों का एक गुच्छा विफल हो रहा है, क्योंकि डेवलपर ने टेस्ट के भीतर एक रेडिस क्लाइंट की निर्भरता का मज़ाक उड़ाया नहीं है। मैं इस मामले में हाथ देने की कोशिश कर रहा हूं लेकिन खुद को कठिनाइयों का सामना करना पड़ रहा हूं।पायथन में एक रेडिस क्लाइंट का नकल कैसे करें?

विधि एक 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) 

लेकिन मैं क्या set(), कोड में सेट इतना है कि परीक्षा उत्तीर्ण होगा करने के लिए get() की return_value स्थापित करने के लिए कैसे पता नहीं है।

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

किसी भी सलाह दें:

अभी इस लाइन परीक्षण में विफल रहता है?

+0

उपयोग 'एक साझा वस्तु होने के साथ side_effect' करना चाहिए सेट 'side_effect' में सेट करें और' side_effect' प्राप्त करने में लौटा? https://docs.python.org/3/library/unittest.mock.html#quick-guide – user3012759

उत्तर

9

लगता है कि तुम पक्ष प्रभाव का उपयोग निर्धारित करने और एक स्थानीय 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 

इस परीक्षण नहीं किया है, लेकिन मुझे लगता है कि आप क्या चाहते हैं

+0

यह काम करता है। बहुत धन्यवाद +1 – Houman

संबंधित मुद्दे