Download - Como escribir buenos tests al hacer TDD
![Page 1: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/1.jpg)
agile software development & services
Cómo escribir buenos test
al hacer TDD
www.10pines.com
Hernán Wilkinson
Twitter: @HernanWilkinson
Blog: objectmodels.blogspot.com
www.10pines.com
![Page 2: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/2.jpg)
¿Qué es TDD?
Técnica de Aprendizaje
Iterativa e Incremental
Basada en Feedback Inmediato
Como side-effect:
Recuerda todo lo aprendido
Y permite asegurarnos de no haber “desaprendido”
Incluye análisis, diseño, programación y testing
![Page 3: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/3.jpg)
¿Cómo se hace TDD?
1) Escribir un test
- Debe ser el más sencillo que se nos ocurra - Debe fallar al correrlo
![Page 4: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/4.jpg)
¿Cómo se hace TDD?
1) Escribir un test
- Debe ser el más sencillo que se nos ocurra - Debe fallar al correrlo
2) Correr todos los tests
- Implementar la solución más simple que haga pasar el/los test/s
- GOTO 2 hasta que “todos los tests” pasen
![Page 5: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/5.jpg)
¿Cómo se hace TDD?
1) Escribir un test
- Debe ser el más sencillo que se nos ocurra - Debe fallar al correrlo
2) Correr todos los tests
- Implementar la solución más simple que haga pasar el/los test/s
- GOTO 2 hasta que “todos los tests” pasen
3) Reflexiono - ¿Se puede mejorar el código?
- Sí -> Refactorizar. GOTO 2
- No -> GOTO 1
![Page 6: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/6.jpg)
¿Cómo se hace TDD?
1) Escribir un test
- Debe ser el más sencillo que se nos ocurra - Debe fallar al correrlo
2) Correr todos los tests
- Implementar la solución más simple que haga pasar el/los test/s
- GOTO 2 hasta que “todos los tests” pasen
3) Reflexiono - ¿Se puede mejorar el código?
- Sí -> Refactorizar. GOTO 2
- No -> GOTO 1
![Page 7: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/7.jpg)
¿Cómo se hace TDD?
1) Escribir un test
- Debe ser el más sencillo que se nos ocurra - Debe fallar al correrlo
2) Correr todos los tests
- Implementar la solución más simple que haga pasar el/los test/s
- GOTO 2 hasta que “todos los tests” pasen
3) Reflexiono - ¿Se puede mejorar el código?
- Sí -> Refactorizar. GOTO 2
- No -> GOTO 1
![Page 8: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/8.jpg)
Regla 1: Si el test no falla la primera vez que corre es porque: a) Estamos testeando algo
testeado b) Nos adelantamos en el
paso 2
![Page 9: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/9.jpg)
¿Cómo se hace TDD?
1) Escribir un test
- Debe ser el más sencillo que se nos ocurra - Debe fallar al correrlo
2) Correr todos los tests
- Implementar la solución más simple que haga pasar el/los test/s
- GOTO 2 hasta que “todos los tests” pasen
3) Reflexiono - ¿Se puede mejorar el código?
- Sí -> Refactorizar. GOTO 2
- No -> GOTO 1
![Page 10: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/10.jpg)
¿Cómo se hace TDD?
1) Escribir un test
- Debe ser el más sencillo que se nos ocurra - Debe fallar al correrlo
2) Correr todos los tests
- Implementar la solución más simple que haga pasar el/los test/s
- GOTO 2 hasta que “todos los tests” pasen
3) Reflexiono - ¿Se puede mejorar el código?
- Sí -> Refactorizar. GOTO 2
- No -> GOTO 1
![Page 11: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/11.jpg)
Regla 2: Sensar el tiempo que nos lleva
realizar cada paso
![Page 12: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/12.jpg)
Tiempo
Si nos lleva mucho tiempo escribir el test
El test no es el más sencillo
¿Nos cuesta mucho crear los objetos para la prueba?
Hay que crear objetos que ayuden en la creación de objetos
El diseño del sistema no es bueno y nos dificulta la escritura del test
![Page 13: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/13.jpg)
Tiempo
Si nos lleva mucho tiempo hacer pasar el test
El test no era el más sencillo Borrar el test e intentar con uno más sencillo
La implementación no resuelve el problema ¡Debuggear!
El diseño del sistema no es bueno y nos dificulta la implementación de nueva funcionalidad Hacer paso 3
para mejorar el diseño antes de seguir
![Page 14: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/14.jpg)
Tiempo
Los test tardan mucho tiempo en ejecutar
El sistema está acoplado con recursos externos que hace que ejecute “lento”. Ejemplo: Base de datos
Los test no verifican funcionalidad sino performance
Test de performance se hacen con testing, no TDD
![Page 15: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/15.jpg)
Tiempo
Tardo mucho en hacer refactorings
¡Aprender refactorings automatizados!
Si están programando con editores de texto ¡pasar a un IDE!
Aprender como hacer cambios chicos por medio de refactorings encadenados
El diseño del sistema es muy malo, esta muy acoplado y no queda otra que tomarse tiempo para arreglarlo
![Page 16: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/16.jpg)
Estructura de los tests
Setup
Exercise
Assert
Establece el contexto inicial para la ejecución del test. Pre-condición del test (puede ser reificado en mensaje setUp)
Ejercita la funcionalidad específica que se está testeando. Determina QUÉ se está testeando.
Verifica que los resultados sean los esperados. Post-condición del test
![Page 17: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/17.jpg)
Ejemplo
▶ Algoritmo para calcular los factores primos de un número entero. Debe devolver una lista con ellos
– 1 -> {} (no tiene factores primos)
– 2 -> { 2 }
– 3 -> { 3 }
– 4 -> { 2,2 }
– 5 -> { 5 }
– 6 -> { 2,3 }
– 7 -> { 7 }
– 8 -> { 2,2,2 }
– 9 -> { 3,3 }
– 10 -> { 2,5 }
– Etc
![Page 18: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/18.jpg)
¿Cómo lo llamamos?
![Page 19: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/19.jpg)
¿Qué tal así?
![Page 20: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/20.jpg)
¿Entonces cómo llamamos este?
![Page 21: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/21.jpg)
Regla 3: Nombrar los tests sintetizando el
setup, exercise y assertions en una frase
Tip: Nombrar los tests cuando hayamos avanzado en la solución
![Page 22: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/22.jpg)
¿Cuál es el setup y exercise?
![Page 23: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/23.jpg)
![Page 24: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/24.jpg)
Setup
![Page 25: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/25.jpg)
Exercise
![Page 26: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/26.jpg)
Assert
![Page 27: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/27.jpg)
¿Qué tal este?
![Page 28: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/28.jpg)
No suena muy bien…
![Page 29: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/29.jpg)
![Page 30: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/30.jpg)
¿Cómo llamamos estos tests?
![Page 31: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/31.jpg)
![Page 32: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/32.jpg)
Nombres casi iguales… “Nombres repetidos” ¡Tests del mismo caso!
![Page 33: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/33.jpg)
¡Mismo caso funcional!
![Page 34: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/34.jpg)
Regla 4: Nombrar los tests en base al caso
funcional y no en base a los datos de prueba
![Page 35: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/35.jpg)
Tip: Dato de Prueba != Caso de Prueba
Dato de Prueba: Ejemplos concretos que “definen” un caso de prueba
Caso de Prueba: Generalización que incluye los datos de prueba
![Page 36: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/36.jpg)
¡Me da miedo! ¿Qué pasa si …?
![Page 37: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/37.jpg)
![Page 38: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/38.jpg)
Decisión complicada… Números primos infinitos… Ver la implementación
lamentablemente
![Page 39: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/39.jpg)
Ejemplo
▶ Modelar un Calendario de días feriados al que se le pueda preguntar si una fecha es feriado o no
▶ Se pueda indicar qué días son feriados de la siguiente manera:
– Por medio de un día de la semana, ej. Domingo
– Por medio de un día de un mes, ej. 25 de Diciembre
– Por medio de un día particular, ej. 20/4/2012
![Page 40: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/40.jpg)
¿Cómo lo llamamos?
![Page 41: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/41.jpg)
![Page 42: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/42.jpg)
![Page 43: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/43.jpg)
¿Si hago un test con 3 días pasará?
¿y con 4 …? ¿y con 7?
![Page 44: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/44.jpg)
¡Inducción Incorrecta!
![Page 45: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/45.jpg)
Regla 5: ¡Los tests no son una verificación
formal! Técnica: Testar con datos testigos Técnica: Testar con datos bordes
![Page 46: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/46.jpg)
¿Aserción luego del set up?
![Page 47: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/47.jpg)
¿Aserción luego del set up?
Para pensar… first ?
![Page 48: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/48.jpg)
Separar el test en 2
![Page 49: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/49.jpg)
¿Exercise luego de aserción?
![Page 50: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/50.jpg)
¿Exercise luego de aserción?
Para pensar… first ? second?
![Page 51: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/51.jpg)
Separar el test en 2
![Page 52: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/52.jpg)
Regla 6: Los tests deben seguir la
estructura setup-exercise-assertion
![Page 53: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/53.jpg)
first ? second?
![Page 54: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/54.jpg)
Pensar en “tipo” no en implementación
![Page 55: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/55.jpg)
Regla 7: Las aserciones sobre colecciones no deben acoplar a la implementación
Regla 8: Las aserciones
sobre colecciones deben asegurar la doble inclusión
Tip: asertar size e inclusión de cada objeto
![Page 56: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/56.jpg)
Aserción repetida Aserción repetida
![Page 57: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/57.jpg)
¡Reificar aserciones!
![Page 58: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/58.jpg)
Regla 9: Los tests son un sistema más que
hay que desarrollar y mantener. Hacerlo usando las mismas
reglas de diseño que el sistema principal
![Page 59: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/59.jpg)
Regla 10: Los tests son un sistema que usa el sistema principal, por lo tanto los
tests nos convierten en los primeros usuarios del sistema principal y nos
hacen sufrir sus problemas
![Page 60: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/60.jpg)
![Page 61: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/61.jpg)
![Page 62: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/62.jpg)
![Page 63: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/63.jpg)
¿Va a funcionar siempre?
![Page 64: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/64.jpg)
¿Qué problema de diseño tiene esta implementación?
![Page 65: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/65.jpg)
¡Saco acoplamiento
parametrizando la fecha!
![Page 66: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/66.jpg)
¡Ahora la fecha de prueba es relativa, no absoluta!
![Page 67: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/67.jpg)
¡Ahora va a funcionar siempre, no importa que día sea hoy!
![Page 68: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/68.jpg)
Regla 11: Cuando hay dependencia entre datos de prueba e implementación,
romper el acoplamiento parametrizando
Tip: siempre usar datos de prueba relativos, no absolutos
![Page 69: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/69.jpg)
Regla 12: Nunca acoplar la implementación con fuentes de información ni sistemas
externos, parametrizar
![Page 70: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/70.jpg)
Acceso via interface REST El carrito pasa a ser
inválido (inutilizable) luego de 30 minutos de no usarlo
![Page 71: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/71.jpg)
![Page 72: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/72.jpg)
¿Qué principio de diseño se está violando? ¿Cómo lo evito? ¿Qué
tiene que controlar el test?
![Page 73: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/73.jpg)
![Page 74: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/74.jpg)
Reloj manual para controlar el paso del tiempo
![Page 75: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/75.jpg)
Parametrizo cómo obtiene la hora
Reloj manual para controlar el paso del tiempo
![Page 76: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/76.jpg)
Parametrizo cómo obtiene la hora
Reloj manual para controlar el paso del tiempo
Simulo paso del tiempo
![Page 77: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/77.jpg)
Regla 13: El test tiene que estar en control de
TODO (hasta del paso del tiempo si es
necesario)
Tip: Si hay que controlar el tiempo, simular el reloj
![Page 78: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/78.jpg)
¿Cómo hay que testear excepciones?
![Page 79: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/79.jpg)
Solo la colaboración que levanta la excepción
![Page 80: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/80.jpg)
Solo la colaboración que levanta la excepción
Aserto que se levantó la ex. esperada
![Page 81: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/81.jpg)
Solo la colaboración que levanta la excepción
Aserto que se levantó la ex. esperada
Aserto sobre la post-condición
![Page 82: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/82.jpg)
Regla 14: Cuando se testea por excepciones
se debe: 1) Una colaboración en el try 2) Asertar exc. correcta 3) Asertar post-condición Tip: falta de aserción sobre post-condición puede indicar que no estamos modelando
algo
![Page 83: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/83.jpg)
![Page 84: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/84.jpg)
Referencia directa a la base de datos
![Page 85: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/85.jpg)
Referencia directa a la base de datos y cómo se busca en ella
¿Cómo rompo este acoplamiento?
![Page 86: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/86.jpg)
Modela un sub-sistema
![Page 87: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/87.jpg)
Lo implementa de manera persistente
![Page 88: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/88.jpg)
Lo implementa de manera transient
![Page 89: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/89.jpg)
Regla 15: Modelar los conjuntos de objetos
(sistemas)
Tip: Queda representada la arquitectura del sistema por medio de objetos
![Page 90: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/90.jpg)
¿Cómo defino que subsistema usar?
![Page 91: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/91.jpg)
![Page 92: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/92.jpg)
![Page 93: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/93.jpg)
![Page 94: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/94.jpg)
![Page 95: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/95.jpg)
Regla 16: Modelar los ambientes de
ejecución y dejarlos como único punto de
acceso a toda la información
![Page 96: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/96.jpg)
▶ Regla 1: Si el test no falla la primera vez es porque …
▶ Regla 2: Sensar el tiempo que nos lleva realizar cada paso
▶ Regla 3: Nombrar los tests sintetizando el setup, exercise y assertions en una frase
▶ Regla 4: Nombrar los tests en base al caso funcional y no en base a los datos de prueba
Conclusiones
![Page 97: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/97.jpg)
▶ Regla 5: ¡Los tests no son una verificación formal!
▶ Regla 6: Los tests deben seguir la estructura setup-exercise-assertion
▶ Regla 7: Las aserciones sobre colecciones no deben acoplar a la implementación
▶ Regla 8: Las aserciones sobre colecciones deben asegurar la doble inclusión
Conclusiones
![Page 98: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/98.jpg)
▶ Regla 9: Los tests son un sistema más que hay que desarrollar y mantener …
▶ Regla 10: … los tests nos convierten en los primeros usuarios del sistema …
▶ Regla 11: … romper el acoplamiento parametrizando
▶ Regla 12: Nunca acoplar la implementación con fuentes de información ni sistemas externos, parametrizar
Conclusiones
![Page 99: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/99.jpg)
▶ Regla 13: El test tiene que estar en control de TODO
▶ Regla 14: Cuando se testea por excepciones se debe …
▶ Regla 15: Modelar los conjuntos de objetos (sistemas)
▶ Regla 16: Modelar los ambientes de ejecución y dejarlos como único punto de acceso a toda la información
Conclusiones
![Page 100: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/100.jpg)
![Page 101: Como escribir buenos tests al hacer TDD](https://reader034.vdocuments.co/reader034/viewer/2022042706/587bafe21a28ab81758b7bc7/html5/thumbnails/101.jpg)
agile software development & services
Muchas gracias!
[email protected] www.10Pines.com twitter: @10Pines
Argentina Tel.: +54 (11) 6091-3125 Av. Alem 693, 5B (1001) Buenos Aires