2010-10-11 24 views
10

Je suis un développeur C# se déplaçant dans certains trucs Python, donc je ne sais pas ce que je fais pour le moment. J'ai lu que vous n'avez pas vraiment besoin de Dependency Injection avec Python. On m'a dit que vous pouvez instancier des objets dans votre code et les faire fonctionner comme vous le souhaitez, cependant, vous pouvez pointer des méthodes sur ces objets vers mes propres stubs définis dans mes tests - soi-disant sans faux-semblants.Comment boucher les méthodes Python sans Mock

Est-ce vrai? J'ai essayé de le faire et je n'arrive pas à le faire fonctionner. Comment cela est-il réellement fait? Comment est-ce que je stub une méthode dans Python sans une bibliothèque moqueuse?

Répondre

25

Voici un exemple de base. Notez que la méthode getData() de production n'est jamais appelée. Il a été moqué avec un talon.

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

Merci Peter. C'est ce que je cherche. –

+0

C'est exactement ce que je cherchais, même si je pensais que ce serait plus difficile =) – Sean