2010-10-11 13 views
10

के बिना पाइथन विधियों को कैसे दबाएं मैं एक सी # देव कुछ पायथन सामग्री में जा रहा हूं, इसलिए मुझे नहीं पता कि मैं अभी तक क्या कर रहा हूं। मैंने पढ़ा है कि आपको वास्तव में पाइथन के साथ निर्भरता इंजेक्शन की आवश्यकता नहीं है। मुझे बताया गया है कि आप अपने कोड में ऑब्जेक्ट्स को तुरंत चालू कर सकते हैं और उन्हें जिस तरह से चाहते हैं उसे चला सकते हैं, हालांकि, आप उन वस्तुओं पर विधियों को अपने परीक्षणों में परिभाषित मेरे स्वयं के स्टब्स पर इंगित कर सकते हैं - माना जाता है कि बिना मोजे।मैक

क्या यह सच है? मैंने इसे करने की कोशिश की है और इसे काफी काम नहीं कर सकता है। यह वास्तव में कैसे किया जाता है? मैं एक मॉकिंग लाइब्रेरी के बिना पाइथन में एक विधि कैसे लगा सकता हूं?

उत्तर

25

यहां एक मूल उदाहरण है। ध्यान दें कि उत्पादन getData() विधि कभी नहीं कहा जाता है। यह एक स्टब के साथ मजाक कर दिया गया है।

import unittest 
class ClassIWantToTest(object): 

    def getData(self): 
     print "PRODUCTION getData called" 
     return "Production code that gets data from server or data file" 

    def getDataLength(self): 
     return len(self.getData()) 

class TestClassIWantToTest(unittest.TestCase): 

    def testGetDataLength(self): 
     def mockGetData(self): 
      print "MOCK getData called" 
      return "1234" 

     origGetData = ClassIWantToTest.getData 
     try: 
      ClassIWantToTest.getData = mockGetData 
      myObj = ClassIWantToTest() 
      self.assertEqual(4, myObj.getDataLength()) 
     finally: 
      ClassIWantToTest.getData = origGetData 

if __name__ == "__main__": 
    unittest.main() 
+0

धन्यवाद पीटर। यही वह है जिसे मैं ढूंढ रहा हूं। –

+0

यह वही है जो मैं खोज रहा था, हालांकि मैंने सोचा कि यह कठिन होगा =) – Sean