2012-04-25 14 views
18

मान लीजिए इस कोडमॉकिंग - मैं कॉलर पर अपवाद कैसे बढ़ा सकता हूं?

def move(*args, **kwargs): 
    try: 
     shutil.move(source, destination) 
    except Exception as e: 
     raise e 

है और मेरी tests.py

@patch.object(shutil, 'move') 
def test_move_catch_exception(self, mock_rmtree): 
    ''' Tests moving a target hits exception. ''' 
    mock_rmtree.side_effect = Exception('abc') 
    self.assertRaises(Exception, move, 
          self.src_f, self.src_f, **self.kwargs) 

में यह इस

File "unittests.py", line 84, in test_move_catch_exception 
    self.src_f, self.src_f, **self.kwargs) 
AssertionError: Exception not raised 

कहा अगर मैं mock_rmtree पर जोर इसे पारित करेंगे। मैं कॉलर पर कैसे जोर दे सकता हूं (इस मामले में, फ़ंक्शन move)?


रूप aquavitae ने कहा, मुख्य कारणों में कॉपी-पेस्ट त्रुटि हुई थी, और यह भी कि मैंने शुरू में एक टपल जोर देते हुए किया गया था। हमेशा सही रिटर्न प्रकार के साथ अलर्ट करें ...

उत्तर

26

आपके पास आपके उदाहरण में एक टाइपो है, ' गुम है।

यह पूरी तरह से स्पष्ट नहीं है कि आप क्या पूछ रहे हैं, लेकिन यदि मैं आपको सही ढंग से समझता हूं, तो आप यह पूछने के लिए कह रहे हैं कि उठाए गए अपवाद को move के अंदर पकड़ा गया है। एक समस्या यह है कि आप shutil.rmtree पैच कर रहे हैं, shutil.move नहीं, लेकिन आप निश्चित नहीं हो सकते कि shutil.rmtree कभी भी कॉल किया जाएगा। shutil.move केवल shutil.rmtree पर कॉल करता है यदि यह सफलतापूर्वक निर्देशिका की प्रतिलिपि बनाता है, लेकिन चूंकि आप self.src_f को स्वयं कॉपी कर रहे हैं, ऐसा नहीं होता है। यह हालांकि इसे पकड़ने का एक बहुत अच्छा तरीका नहीं है, क्योंकि धारणा है कि shutil.moveshutil.rmtree पर कॉल करेगा, इसकी गारंटी नहीं है और कार्यान्वयन निर्भर है। यह कैसे परीक्षण करने के लिए के लिए

के रूप में, बस जाँच लें कि वापसी मान की उम्मीद है:

@patch.object(shutil, 'move') 
def test_move_catch_exception(self, mock_move): 
    ''' Tests moving a target hits exception. ''' 
    e = OSError('abc') 
    mock_move.side_effect = e 
    returns = move(self.src_f, self.src_f, **self.kwargs) 
    assert returns == (False, e) 
+2

बहुत बहुत शुक्रिया। मैं भ्रम के लिए माफ़ी मांगी। यह एक कॉपी-पेस्ट त्रुटि थी जिसे मैंने नहीं पकड़ा था। हां मैं rmtree की बजाय पैचिंग कदम हूँ। मैंने तदनुसार पोस्ट संपादित किया। आप यहां मेरी लापरवाही के बारे में सही हैं। बहुत बहुत धन्यवाद। – CppLearner

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