2010-10-11 13 views
10

Soy un desarrollador de C# que se está moviendo hacia algunas cosas de Python, por lo que aún no sé lo que estoy haciendo. He leído que realmente no necesita Dependency Injection con Python. Me han dicho que puede crear instancias de objetos en su código y hacer que se ejecuten de la manera que desee, sin embargo, puede apuntar métodos en esos objetos a mis propios stubs definidos en mis pruebas, supuestamente sin burlarse.Cómo anclar los métodos de Python sin Mock

Es esto cierto? Intenté hacerlo y no puedo ponerlo en funcionamiento. ¿Cómo se hace esto? ¿Cómo resuelvo un método en Python sin una biblioteca burlona?

Respuesta

25

Aquí hay un ejemplo básico. Tenga en cuenta que nunca se llama al método getData() de producción. Ha sido burlado con un trozo.

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

Gracias Peter. Esto es lo que estoy buscando. –

+0

Esto es exactamente lo que estaba buscando, aunque pensé que sería más difícil =) – Sean

Cuestiones relacionadas