TDD y Python
[email protected]
@IWT2_Javier
/
TDD no es probar
1. You are not allowed to write
any production code unless
it is to make a failing unit
test pass.
2. You are not allowed to write
any more of a unit test than
is sufficient to fail; and
compilation failures are
failures.
3. You are not allowed to write
any more production code
than is sufficient to pass the
one failing unit test.
Esto es todo
Gracias por
su atención
La complejidad
“Test-Driven
Development (TDD) is a
deceptively simple
idea”
“El Desarrollo Dirigido
por Pruebas (TDD) es
una idea
engañosamente
simple”
“Test-Driven Development (TDD) is a deceptively simple idea”“El Desarrollo Dirigido por Pruebas (TDD) es una idea engañosamente simple”¿Qué buscamos?
¿Por qué querríamos hacer
TDD?
La complicación
Una buena manera de aplicar TDD
Ahora a por un problema
Hazme un programa que me
busque ficheros del mismo tamaño
y me los borre.
Piensa
Y tú, ¿qué harías?
Con TDD
Con TDDEscribe una prueba
Mi primera prueba:
Arrange:
Un directorio
Dos ficheros iguales dentro
ese directorio
Llamar al algoritmo de
de
Act:
borrado
Assert:
Uno de los ficheros ya no
está
y el otro sí
Escribe una prueba
Mi primera prueba:
Arrange:
Un directorio
Dos ficheros iguales dentro
ese directorio
Llamar al algoritmo de
de
Act:
borrado
Assert:
Uno de los ficheros ya no
está
y el otro sí
¿Creo un directorio y dos
ficheros a mano?
Tengo que crearlo cada vez
que ejecute la prueba
¿Creo un directorio y fichero
con código?
Tengo que aprender a
hacerlo y necesito código
para restaurarlo
¿Obtengo un listado de los
Tengo que aprender a
No lo necesito
ficheros?
hacerlo
(aún)
¿Creo un directorio y dos ficheros a mano?Tengo que crearlo cada vez que ejecute la prueba¿Creo un directorio y fichero con código?Tengo que aprender a hacerlo y necesito código para restaurarlo¿Obtengo un listado de los ficheros?Tengo que aprender a hacerloNo lo necesito (aún)Vamos a escribir código
Snippet 01
Snippet 01TDD = ¡¡¡ Piensa !!!!
Directorio
Dame
Ficheros
Borra
este
Borrado de ficheros
DirectorioBorrado de ficherosUtilizando Dobles de Prueba
• Diseñamos el API que
queremos.
• No nos preocupamos
por la implementación
• Verificaos qué se está
invocando
• Devolvemos los
valores adecuados
para la prueba
Single Repsonsibility Principle
A CLASS SHOULD HAVE ONLY
ONE REASON TO CHANGE.
A CLASS SHOULD HAVE ONLY ONE REASON TO CHANGE.¿Cuál es el mínimo código?
Snippet 02
Snippet 02Vuelta a empezar
Snippet 03
Snippet 03¿Y qué hacemos con los mocks?
¿Qué hacemos con los mocks?
Cuando el directorio está vacío entonces no
tengo ficheros.
Cuando borro un fichero el directorio tiene
un fichero menos.
Cuando recupero un fichero de un
directorio entonces puedo conocer su
nombre.
Cuando recupero un fichero de un
directorio entonces puedo conocer su
tamaño.
Etc.
Directorios temporales en
Python (módulo tempfile)
Directorios temporales en Python (módulo tempfile)¿Y cuando lo ponemos todo junto?
En el mundo real
Conclusiones de este ejemplo
• U
I
• Cómo
• ¿Cómo
podemos leer
una única vez
cada
directorio?
sabemos si
hay más de
un fichero con
el mismo
tamaño?
• ¿Cómo
leemos los
ficheros de un
directorio?
• ¿Cómo
borramos
ficheros?
• ¿Cómo
leemos el
tamaño de un
fichero?
•¿Cómo leemos los ficheros de un directorio?•¿Cómo borramos ficheros?•¿Cómo leemos el tamaño de un fichero?•UI•Cómo podemos leer una única vez cada directorio?•¿Cómo sabemos si hay más de un fichero con el mismo tamaño?Retrospectiva de lo que Hemos
Hecho
Nos centramos
en el algoritmo
Tardamos más
en terminar
Nos centramos en el algoritmoTardamos más en terminarTesting en Python
http://wiki.python.org/moin/PythonTestingToolsT
axonomy
Unittest,
Doctest, Nose
Mockito for
Python, Mocker,
Pydoubles
Selenium,
Django Testing
Behave, PyFIT,
Lettuce,
Mamba
http://wiki.python.org/moin/PythonTestingToolsTaxonomyUnittest, Doctest, NoseMockito for Python, Mocker, PydoublesSelenium, Django TestingBehave, PyFIT, Lettuce, MambaAdvertencia
TD
D
Yo
Conclusiones
Pruébalo y elige
Pruébalo y eligeExtra
Para saber más de
TDD.
28
¿Quién soy yo?
Extra
10.000 líneas de código C#...
Comprobado…. 124
assemblies .NET generados….
Comprobado…. 52 scripts de
construcción… comprobado
Ahora que mis pruebas
unitarias están escritas
puedo empezar a construir
mis componentes.
Extra
31
Enlaces
•
•
•
•
•
•
Blog: http://iwt2-javierj.tumblr.com/
Libro:
http://www.iwt2.org/web/opencms/IWT2/comunidad/LibroTDD/?lo
cale=es
GameUS: http://www.gameus.es/
IWT2 DojoUS:
http://www.iwt2.org/web/opencms/IWT2/comunidad/dojous/?local
e=es
Pybonacci:
http
://pybonacci.wordpress.com/2013/01/07/desarrollo-dirigido-por-pr
uebas-en-python-i-una-historia-que-pasa-todos-los-dias/#
more-1352
http://pybonacci.wordpress.com/2013/06/19/desarrollo-dirigido-
por-pruebas-en-python-ii-un-caso-practico-i/
Twitter: @IWT2_Javier/ @GameUsSev / @TDDPractico Fin
32
FinAhora sí
FIN
Comentarios de: TDD y python (0)
No hay comentarios