[pyar] Como mockear un iterable con mockito?

Daniel Moisset dmoisset en machinalis.com
Jue Jun 14 15:25:03 ART 2012


Ya probaste con MagicMock() ? te permite redefinir los metodos
"magicos" como __iter__

Saludos,
   D.


2012/6/14 Gabriel <gepatino en gmail.com>:
> Buenas gente, a ver si alguien me da una mano con algo que no puedo
> resolver, pero no creo que sea tan complicado tampoco.
>
> Quiero testear un pedazo de codigo donde estoy iterando un cursor luego de
> hacer una query, algo asi:
>
> def funcion(cursor):
>     cursor.execute('SELECT * FROM blabla')
>     for row in cursor:
>         do_something
>     return something
>
>
> Antes esta funcion no recorria todos los resultados, sino que usaba solo la
> primer fila, por lo que estabamos usando el metodo cursor.fetchone(), y para
> los tests estabamos haciendo un mock que nos devolvia una fila ficticia:
>
> def test_blabla():
>     cursor = mock()
>     when(cursor).fetchone().thenReturn({'id': 1, 'name': 'pepe'})
>     res = funcion(cursor)
>     ... asserts, etc
>
>
> El tema es que al cambiar de pedir una fila a recorrerlas todas, deberia
> reescribir el metodo __iter__ del cursor mock, pero aparentemente no
> funciona. Probe haciendo una clase iterable que simule ser un cursor, pero
> al mockearla, todos sus metodos son remplazados por un metodo vacío por lo
> que fallan al querer iterarlo.
>
> No importa lo que invente siempre termino en un TypeError: 'mock' object is
> not iterable
>
> Puede ser que este atacando esto desde el lado equivocado, pero no le paso a
> nadie antes? Me costó mucho encontrar algo de info, y lo que encuentro
> tampoco responde especificamente a este tema.
>
> Si el enfoque esta totalmente errado, cual sería la forma correcta de probar
> algo asi?
> La respuesta que encontré es que deberías tener una copia de tu db para
> hacer tests, lo cual no me gusta mucho porque ya lo estamos haciendo y es un
> problema (se rompen los tests si cambia algo en los datos, si esta caido el
> servicio, etc). Encima, en este caso en particular estamos verificando temas
> de GRANTS, entonces es mas facil inventar a mano los casos de prueba en
> algun tipo de mock que definir todos los grants en una db de prueba.
>
> Se escucha todo tipo de ideas/sugerencias.
>
> Gracias
> --
> Gabriel E. Patiño
> http://about.me/gepatino
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar



More information about the pyar mailing list