2010-10-11 24 views
10

Bazı Python öğelerine geçiş yapan bir C# dev oldum, bu yüzden henüz ne yaptığımı bilmiyorum. Python ile Bağımlılık Enjeksiyonuna gerçekten ihtiyacınız olmadığını okudum. Kodunuzdaki nesneleri başlatabildiğiniz ve istediğiniz şekilde çalışabildikleri söylendi, ancak bu nesnelerdeki yöntemleri, kendimi alay etmeden, testlerimde tanımlanmış kendi taslaklarıma yönlendirebilirsiniz.Mock olmadan Python yöntemlerini saplama

Bu doğru mu? Bunu yapmaya çalıştım ve işe yaramıyor. Bu nasıl yapılır? Bir alay kütüphanesi olmadan Python'da bir yöntemi nasıl uygularım?

cevap

25

İşte temel bir örnek. Üretim getData() yönteminin hiçbir zaman çağrılmadığını unutmayın. Bir saplama ile alay edildi.

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

Teşekkürler Peter. Aradığım şey bu. –

+0

Tam olarak aradığım şey buydu, ancak daha zor olacağını düşündüm =) – Sean