2010-10-11 80 views
10

我是一個C#開發人員,正在轉移到一些Python的東西,所以我不知道我在做什麼。我讀過你並不需要使用Python的依賴注入。我被告知你可以在你的代碼中實例化對象,並讓它們以你想要的方式運行,但是,你可以將這些對象上的方法指向我在我的測試中定義的我自己的存根 - 假定沒有嘲諷。如何在不模擬的情況下存儲Python方法

這是真的嗎?我試圖做到這一點,並不能完全奏效。這實際上是如何完成的?如何在沒有模擬庫的情況下在Python中存儲方法?

回答

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

謝謝彼得。這是我正在尋找的。 – 2010-10-12 01:49:52

+0

這正是我所期待的,但我認爲這會更難=) – Sean 2011-01-13 06:49:04

相關問題