2016-05-26 15 views
5

अजगर 2.6.6पाइथन लॉक को कैसे बेकार किया जाए 'साथ' कथन के साथ अधिग्रहित किया गया है?

का प्रयोग तो मैं अभी सीखा है कि निम्नलिखित:

myLock.acquire() 
doStuff() 
myLock.release() 

साथ बदला जा सकता:

with myLock: 
    doStuff() 

मेरे quandry पूर्व कोड के साथ मुझे लगता है कि unittest सकता है ताला का उपयोग करके सामान की सुरक्षा के लिए लॉक का उपयोग किया जा रहा था। लेकिन उत्तरार्द्ध के साथ अब मेरे unittest (अपेक्षित) विफल रहता है, क्योंकि अधिग्रहण() और रिलीज() को बुलाया नहीं जा रहा है। तो बाद के मामले के लिए, मैं कैसे सत्यापित करूं कि लॉक का उपयोग करने के लिए सामान का उपयोग करने के लिए किया जाता है?

मैं दूसरी विधि पसंद करता हूं क्योंकि यह केवल अधिक संक्षेप में नहीं है, लेकिन ऐसा कोई मौका नहीं है कि मैं संसाधन लिखने के लिए भूल गया कोड लिखूंगा। (ऐसा नहीं है कि मैंने पहले कभी ऐसा किया है ...)

उत्तर

6

with कथन आंतरिक रूप से __enter__ और __exit__ जादू विधियों को शुरुआत और अंत (क्रमशः) पर कॉल करता है। आप MagicMock या स्पष्ट रूप से mock.__enter__ = Mock();mock.__exit__ = Mock() सेट करके इन तरीकों का नकल कर सकते हैं।

जादू तरीकों को सेट करना इस तरह से केवल मोजे के लिए काम करता है; गैर-मॉक ऑब्जेक्ट पर एक जादू विधि को ओवरराइड करने के लिए, आपको इसे टाइप पर सेट करना होगा।

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