[pyar] mocking

Daniel Moisset dmoisset en machinalis.com
Mar Oct 29 09:48:54 ART 2013


2013/10/29 Angel Java Lopez <ajlopez2000 en gmail.com>

> Permissooo... me entrometo en el thread ;-)
>
> Cual es el caso de uso de un mock en Python?
>
>
El mismo que en otros lados, tenes que testear una capa "alta" de forma
independiente de las capas "bajas", y no tenes como controlar las
dependencias.

Si bien el *objetivo* es el mismo, el *mecanismo* de mocking en python es
bastante diferente a otros lenguajes; no construis clases MockA, MockB
MockC para sustituir clases A, B, C, sino que mock te da un objeto
universal, que simplemente lo instancias y el comportamiento default muchas
veces sirve (implementa cualquier metodo que le pidas como un NOP, y
registra todas las llamadas); si el default no te sirve lo podes configrar
un poquito (en runtime), por ejemplo para que hacer que un metodo devuelva
algun valor predefinido o levante una excepcion (y muy ocasionalmente,
ejecute codigo que le das)



> Yo, en general, en otras tecnologias no programo mocks, solo digamos en
> casos extremos.
>

Bueno, en python nunca "programas" un mock, en el mismo sentido que no
"programas" un datetime. Lo usas.


> Programo implementaciones alternativas que entrego en cada iteracion.
> Ejemplo, si tengo que consumir un web service que me da el tipo de cambio,
> escribo codigo un proveedor de tipo de cambio, que simplemente me de el
> tipo de cambio fijo. Luego, cuando el caso de uso lo amerite, le pongo un
> proveedor de tipo de cambio que lo lea de un json. Luego de una tabla por
> dia o un documento mongodb, luego algun dia, voy contra el web service
> real, luego de haber escrito un spike para ver si me puedo conectar. Aclaro
> que trato de seguir el flujo de trabajo de TDD, no solamente testing.
>

Bueno, todos esos casos los podes sustituir con una instancia de mock con
muy muy poco laburo.


> Si recuerdo, un mock luego se puede interrogar para ver si cumplio con las
> expectativas de llamadas, no es simplemente un stub para salir del paso.
> Pero tampoco eso he necesitado hasta ahora, yo diria, lo he necesitado casi
> nunca. Tal vez en JavaScript, tengo algun stub. En C# y en Java, no he
> usado mocks en anios. En Ruby apenas programo, pero lo que hice, lo hice
> sin mocks que recuerde.
>
> Como es en Python? Se necesitan mocks?
>

Para testear si, a veces vienen bien. Sobre todo para testear interaccion
con componentes externos, con cosas hechas a nivel modulo (que son pseudo
"globales" y necesitas alguna forma de sustituirlos)

 Saludos,

D.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20131029/e09df2c7/attachment.html>


More information about the pyar mailing list