2. Objetivos
• Resolver la kata Tenis
con TDD y Python
• Exponer errores y ver la
manera de detectarlos.
• Comparar distintas
soluciones
desarrolladas con TDD.
Objetivos
2
3. Índice
1. Repaso de TDD
2. Kata Tennis.
3. PowerPoint-Driven
Development.
4. Primer diseño (y pruebas).
5. Continuamos.
6. Refactorizar la clase Player.
7. El Partido de Tenis.
8. Random tennis
9. Conclusiones.
Índice 10. Otras soluciones.
11. Extra 3
5. Cata - Tenis
Reglas
• un jugador comienza con puntación 0.
• Los puntos se ganan en esta secuencia: 0 -> 15 -> 30 -
> 40.
• Si un jugador consigue 40 y puntúa de nuevo, el
jugador gana el juego si el otro no tiene 40 puntos.
• Si los dos jugadores tienen al mismo tiempo 40
puntos, se llama "iguales" (deuce en inglés)
• Puntuar durante iguales, da al jugador "ventaja". Si el
otro jugador puntúa en ese momento, la puntuación
vuelve a iguales.
• Si un jugador tiene "ventaja" y puntúa de nuevo, el
jugador gana el juego.
http://www.solveet.com/exercises/Kata-Tennis/13 5
6. Cata - Tenis
Metas:
• Los jugadores deben poder
ganar puntos.
• El juego debe terminar con
un ganador.
• Debes de manejar la
casuística de "iguales"
• Después de terminar el
juego, debe determinarse
quién es el ganador.
• Debe ser posible obtener la
Aplica TDD de manera puntuación de cualquier de
estricta. los jugadores en cualquier
momento del partido.
6
8. La primera prueba
No intentes hacerlo todo de
golpe.
• Elige algo pequeño y
simple.
• Escribe una prueba que lo
muestre.
• Codifica la prueba.
• Por ejemplo: pasar de 0 a
15 o el match aún no ha
terminado
8
9. La Segunda Prueba
¿…y ahora?
• ¿Cuál es la prueba que te
hace avanzar más?
• Por ejemplo puedes
continuar con las
puntuaciones hasta la
casuística de los 40.
• Recuerda refactorizar.
9
10. Ha pasado el tiempo
¿atascado?
• No te preocupes si tienes
que volver a empezar.
• No es una pérdida de
tiempo. Ya verás como la
siguiente vez te sale una
solución MUCHO MEJOR.
10
11. Esto se acaba
¿Has terminado?
• ¿Y si intentas simular una
partida de tenis con
números aleatorios?.
¿No has terminado?
• Refactoriza y que quede
bonito
11
13. Random Tennis
• ¿Y si se calcula aleatoriamente el jugador que gana?
• ¿Y si ejecuto muchos partidos seguimos y
compruebo que todo funciona correctamente?
• Esto ya no son pruebas unitarias.
• Si podemos hacerlo sin cambiar una coma de nuestro
código es una buena indicación (si no, intentamos
documentar los problemas con pruebas y corregimos
nuestro código)
Vamos a hacerlo
15. Random Tenis
Esto no es código de
producción ,sino de
pruebas
Todo funciona a la primera
Por qué limitarnos a un único partido? Por qué no jugamos
10.000? Vamos a hacerlo
16. Random Tenis
Este test no debería de fallar si todo lo hicimos
bien (y el test está bien escrito)
17. Random Tenis
Ooops, demasiado lento. No vale
para prueba unitaria.
Pues parece que funciona.
19. Otras soluciones
TDD in Python in 5 minutes
Set
Score
TestSetWinning: 6 pruebas
TestScoreNames: 1 prueba
http://css.dzone.com/articles/tdd-python-5-minutes
28. Actividades
• Consulta las solucioens
si pruebas
• ¿Crees que habrían
salido estas soluciones
haciendo TDD?
• ¿Serías capa de escribir
prueba spara ese código
tal cuál está escrito, sin
modificarlo?
Autoevalua TDD
28
31. Extra
Ejemplo de mocks en Python
http://iwt2-
javierj.tumblr.com/post/36695988608/mocks-en-python-
previa-python-tdd
Ejemplo de Behave en Python
http://iwt2-javierj.tumblr.com/post/36762766836/atdd-
bdd-con-python-y-behave-previa-python-tdd
31