unittest unit test property mock example data python mocking python-mock

python - unit - pytest mock



Burlándose de un solo método en un objeto (1)

Estoy familiarizado con otras bibliotecas de burla en otros idiomas, como Mockito en Java, pero la biblioteca mock de Python me confunde la vida.

Tengo la siguiente clase que me gustaría probar.

class MyClassUnderTest(object): def submethod(self, *args): do_dangerous_things() def main_method(self): self.submethod("Nothing.")

En mis pruebas, me gustaría asegurarme de que se haya llamado al main_method cuando se ejecutó main_method y de que se haya llamado con los argumentos correctos. No quiero que se ejecute el submethod , ya que hace cosas peligrosas.

No estoy completamente seguro de cómo empezar con esto. La documentación de Mock es increíblemente difícil de entender y no estoy seguro de qué burlarme ni cómo burlarme de ella.

¿Cómo puedo burlarme de la función de main_method , dejando la funcionalidad en main_method solo?


Creo que lo que estás buscando es mock.patch.object

with mock.patch.object(MyClassUnderTest, "submethod") as submethod_mocked: submethod_mocked.return_value = 13 MyClassUnderTest().main_method() submethod_mocked.assert_called_once_with(user_id, 100, self.context, self.account_type)

Aquí hay una pequeña descripción.

patch.object(target, attribute, new=DEFAULT, spec=None, create=False, spec_set=None, autospec=None, new_callable=None, **kwargs)

parchear el miembro nombrado (atributo) en un objeto (objetivo) con un objeto simulado.