Estoy tratando de usar el parche para devolver el simulacro dentro de un método. La estructura básica es la siguiente:El parche falso no funciona con la clase en __init__.py
MyCode.py
class MyClass:
def __init__(self, first_name, last_name):
self.first = first_name
self.last = last_name
def get_greeting(self):
return 'Hello {f} {l}'.format(f=self.first, l=self.last)
def get_new_greeting(first_name, last_name):
obj = MyClass(first_name, last_name)
return obj.get_greeting()
my_code_test.py
import unittest
from mock import Mock, patch
import my_code
class TestMyCode(unittest.TestCase):
def setUp(self):
pass
@patch('my_code.MyClass')
def test_get_greeting(self, MockClass):
instance = MockClass.return_value
mock_greeting = 'Hello Me'
instance.get_greeting.return_value = mock_greeting
greeting = my_code.get_new_greeting('john', 'doe')
self.assertEqual(greeting, mock_greeting)
if __name__ == '__main__':
unittest.main()
El código anterior funciona bien para mí. Sin embargo, cuando aplico el mismo patrón al código real que intento probar, el objeto real (no el simulacro) se devuelve en el método que se prueba. No puedo ver ninguna diferencia El único pensamiento que es un poco diferente es que la clase real se define en un archivo init .py. No estoy seguro si esto hace la diferencia o no? ¿Alguien ha visto esto antes?
Nota: la lib real es Twilio 3.3.5 y estoy usando Python y Django 2.6.5 1.3.1 y 0.7.2 Mock
Probablemente necesite publicar el código que no está funcionando, en lugar del código que está. –
@DanielRoseman punto muy válido. La razón por la que utilicé este enfoque fue porque pensé que muy pocas personas tendrían el paquete Twilio y que quizás no quieran instalarlo (aunque esto no es un gran problema si está usando virtualenv), y quería mostrar que entendía el principio básico de lo que necesitaba hacer. Gracias por su respuesta. –