Estoy usando simulacro con Python y me preguntaba cuál de esos dos enfoques es mejor (léase: más pitónico).
Método uno : simplemente cree un objeto simulado y úselo. El código se ve así:
def test_one (self):
mock = Mock()
mock.method.return_value = True
self.sut.something(mock) # This should called mock.method and checks the result.
self.assertTrue(mock.method.called)
Método dos : use un parche para crear una simulación. El código se ve así:
@patch("MyClass")
def test_two (self, mock):
instance = mock.return_value
instance.method.return_value = True
self.sut.something(instance) # This should called mock.method and checks the result.
self.assertTrue(instance.method.called)
Ambos métodos hacen lo mismo. No estoy seguro de las diferencias.
¿Alguien podría iluminarme?
python
unit-testing
mocking
Sardathrion - contra el abuso SE
fuente
fuente

Respuestas:
mock.patches una criatura muy diferente amock.Mock.patchreemplaza la clase con un objeto simulado y le permite trabajar con la instancia simulada. Eche un vistazo a este fragmento:patchreemplazaMyClassde una manera que le permite controlar el uso de la clase en las funciones que llama. Una vez que parchea una clase, las referencias a la clase son reemplazadas por completo por la instancia simulada.mock.patchse usa generalmente cuando está probando algo que crea una nueva instancia de una clase dentro de la prueba.mock.Mocklos casos son más claros y preferidos. Si suself.sut.somethingmétodo creó una instancia de enMyClasslugar de recibir una instancia como parámetro, entoncesmock.patchsería apropiado aquí.fuente
Tengo un video de YouTube sobre esto.
Respuesta corta: utilícela
mockcuando esté pasando lo que quiere que se burlen ypatchsi no. De los dos, se prefiere la simulación porque significa que está escribiendo código con la inyección de dependencia adecuada.Ejemplo tonto:
fuente