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.patch
es una criatura muy diferente amock.Mock
.patch
reemplaza la clase con un objeto simulado y le permite trabajar con la instancia simulada. Eche un vistazo a este fragmento:patch
reemplazaMyClass
de 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.patch
se usa generalmente cuando está probando algo que crea una nueva instancia de una clase dentro de la prueba.mock.Mock
los casos son más claros y preferidos. Si suself.sut.something
método creó una instancia de enMyClass
lugar de recibir una instancia como parámetro, entoncesmock.patch
sería apropiado aquí.fuente
Tengo un video de YouTube sobre esto.
Respuesta corta: utilícela
mock
cuando esté pasando lo que quiere que se burlen ypatch
si 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