Cómo aplastar métodos de Python sin Mock

Soy un dev de C # que se está moviendo en algunas cosas de Python, así que no sé qué estoy haciendo todavía. He leído que realmente no necesita la dependency injection con Python. Me han dicho que puede crear una instancia de los objetos en su código y hacer que se ejecuten de la manera que desee; sin embargo, puede apuntar los métodos de esos objetos a mis propios stubs definidos en mis pruebas, supuestamente sin burlas.

¿Es esto cierto? He intentado hacerlo y no puedo hacer que funcione. ¿Cómo se hace esto realmente? ¿Cómo apago un método en Python sin una biblioteca burlona?

Aquí hay un ejemplo básico. Tenga en cuenta que el método de producción getData () nunca se llama. Se ha burlado con un talón.

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()