2013-08-06 6 views
5

मैं एक विशिष्ट वापसी मूल्य के साथ कक्षा से विधि को प्रतिस्थापित करने के लिए नकली का उपयोग कर रहा हूं। यह बहुत अच्छा काम करता है, शायद थोड़ा बहुत अच्छा ... मैं यह करता हूं (नीचे देखें), लेकिन अगले टेस्ट क्लास में, मैं बिना किसी मजाक के पासवर्ड पासवर्ड का पुन: उपयोग करता हूं, और उस परीक्षण में लगाए गए नकल अभी भी प्रभावी हैं।पायथन पूर्ववत विधि नकली

from utils import password as pass_helper 

class TestPassword(unittest.TestCase): 
    def setUp(self): 
     self.username = "user" 
     self.password = "Test_1234_pass" 
     pass_helper._get_password_from_keyboard = Mock(return_value=self.password) 

    def test_password(self): 
     password = pass_helper._get_password_from_keyboard(self.username) 
     self.assertEqual(password, self.password) 

मैं कुछ इस तरह कर रही द्वारा टियरडाउन विधि में नकली नाश करने की कोशिश की, लेकिन यह काम नहीं करता।

pass_helper._get_password_from_keyboard = pass_helper._get_password_from_keyboard 

मैं कक्षा विधि के मूल functionnality कैसे बहाल कर सकते हैं?

उत्तर

3

समस्या, जैसा कि ऐसा लगता है कि आप एकत्र हुए हैं, यह है कि आपके द्वारा किए गए परिवर्तन परीक्षण के दायरे तक ही सीमित नहीं हैं, बल्कि इसके बजाय अन्य परीक्षणों में खून बहते हैं (जो निश्चित रूप से यूनिट परीक्षण करते समय एक बड़ी समस्या है) । अपने टियरडाउन विधि में परिवर्तन पीछे का आपका विचार, एक अच्छा एक है लेकिन समस्या यह है कि आप कर रहे हैं विधि के नकली संस्करण स्वंय फिर से बताए है जब आप ऐसा करते हैं:

pass_helper._get_password_from_keyboard = pass_helper._get_password_from_keyboard 

कुछ इस तरह होना चाहिए काम करते हैं, जहां विधि आप एक अस्थायी चर करने के लिए विधि के 'असली' संस्करण आवंटित मजाक से पहले:

def setUp(self): 
    self.username = "user" 
    self.password = "Test_1234_pass" 
    self.real_get_password_from_keyboard = pass_helper._get_password_from_keyboard 
    pass_helper._get_password_from_keyboard = Mock(return_value=self.password) 

def tearDown(self): 
    pass_helper._get_password_from_keyboard = self.real_get_password_from_keyboard 

def test_password(self): 
    password = pass_helper._get_password_from_keyboard(self.username) 
    self.assertEqual(password, self.password) 

आशा इस मदद करता है!

+0

मेरी समस्या को ठीक करने के लिए लगता है, धन्यवाद! :) – Amaranth

+0

ऐसा करने के बाद, मुझे 'अनबाउंड विधि xxx को xxx इंस्टेंस के साथ पहली तर्क के रूप में जाना चाहिए (इसके बजाय int प्राप्त हुआ) –

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