[pyar] Interfases y Mock

Juan Gabardini jgabardini en gmail.com
Lun Feb 21 10:33:10 ART 2011


Hola

En el equipo estamos tratando de hacer TDD. Mi poca experiencia en TDD es en
Java, y les comento un problema que me encontré, posiblemente causado por
tratar de martillar (Java) con un destornillador (Python).

La situación:
1- Estoy agregando funcionalidad a una clase A y quiero comprobarlo en una
prueba unitaria.
2- La clase delega parte de la implementación a un tercero B (con un método
B.m() ). No quiero probar el tercero (estaría integrando), solo quiero saber
que A invoca a B.m. Uso Mockist style [1]
3- En este caso particular, no usé ningún framework de mock. Implemento el
mock (_mock_B.m) usando duck-typing [2][3]
4- Las pruebas pasan

El problema
5- Agrego nueva funcionalidad en B. Para eso, cambio la firma del método m
6- Las pruebas pasan ... y no deberían. El motivo: _mock_B.m no cambió, ya
no se cumple que _mock_B.m sea un doble de B.m

La pregunta
Se me ocurre varias maneras de solucionar esto: clases abstractas [4] como
mixin, interfases [5], pruebas entre el mock y la clase real, pruebas de
integración, ...
Ninguna me convence.
De que forma manejarian esto?

Muchas gracias
Nota: voy a postear esta pregunta también en tdd-es y foro-agiles. Espero
que no moleste

[1] http://martinfowler.com/articles/mocksArentStubs.html
<http://martinfowler.com/articles/mocksArentStubs.html>[2]
http://en.wikipedia.org/wiki/Duck_typing
[3] http://docs.python.org/glossary.html#term-duck-typing
[4] http://docs.python.org/library/abc.html
[5] http://dirtsimple.org/2004/12/python-interfaces-are-not-java.html

-- 
Juan Gabardini
twitter&skype:jgabardini | http://softwareagil.blogspot.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20110221/1efad33a/attachment.html>


More information about the pyar mailing list