Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Enfoque de la Charla
Presentar un ejemplo de principio a fin
de una funcionalidad de un proyecto.
Sin profundizar en las herramientas
utilizadas. El objetivo es clarificar el
proceso de TDD.
Objetivos de la charla
-- Introducir TDD como una alternativa viable al
desarrollo tradicional.
-- Crear cierta inquietud por profundizar mas en
el tema.
-- Exponer las ventajas que TDD tiene para el
desarrollador.
-- Explicar paso a paso como afrontar una
Prueba comportamientos en
aislamiento TOTAL respecto al
resto del sistema. Prueba una y
solo una caracteristica sin que
los demas elementos del
sistema afecten su ejecución.
El primer Test Unitario.
La primera abstracción que se nos ocurre es una Cuenta. En la que podemos
depositar y sacar dinero.
Hacemos el test para depositar dinero
El primer Test Unitario.
Hacemos el test compilar. Para eso creamos la clase Account y los métodos
necesarios.
El primer test unitario.
El Test Compila.
El primer Test Unitario
Barra roja
El primer Test unitario.
Implementación Falsa VS Implementación obvia.
Pasamos el Test con implementación falsa.
El primer Test unitario.
Realizamos otro test que nos obligue a sustituir la implementación
falsa. Esto es Triangulación en TDD
El primer Test unitario.
Cambiamos la implementación
El primer Test unitario.
La barra verde nuevamente
El primer Test unitario.
Cuando se sepa claramente la
implementación obvia, aplicarla.
No es necesario siempre dar los pasos
mas pequeños posibles.
Si la implementación obvia resulta no
ser tan obvia, y al implementarla los
test fallan. Hacer los pasos mas
pequeños posibles.
Probando los fallos.
El uso de mocks
Se puede establecer su necesidad en
cualquiera de los dos tiempos de
diseño. Escribir el Test, o la
refactorización.
Refactorizando CurrencyService. Ese
mapa de mapas es muy lioso. Se nos
ocurre mover la responsabilidad de
saber el rate de cambio a la propia
divisa.
Para hacer esto decidimos también
conversión establecer Rates a una divisa
única y utilizar esta para los cambios.
Usamos el Dólar.
Escribimos los Tests (En realidad se escribieron 1 a
1 estos tests). Y Ejecutamos, Barra Roja.
Implementamos
Refactorizamos CurrencyService
Persistiendo los cambios. Servicio de persistencia de cuentas. Mock del Dao en Las transferencias. TDD.
AccountService debe permitir persistir cuentas. No compila. Añadimos una nueva propiedad a la clase Account. El identificador.
AccountNumber. Aqui incluimos el mock antes de implementar nada. Sabemos que por buena practica el Servicio no irá directo
contra Repositorio.
Persistiendo los cambios
- Diseñamos el Test con las
dependencias en Mente.
- Nos damos cuenta de la necesidad de
un identificador de cuenta. Y lo
incluimos en nuestro Test.
- Siempre pensar en como queremos
invocar a nuestras APIs
Lo hacemos compilar. Implementamos en account service.
Ejecutamos el test. Barra Verde.
Test Driving el DAO. Test de
Integración.
Ahora haremos la implementación
del DAO guiado por tests.
Exactamente igual que como hasta
ahora. Solo que ahora interactuamos
con elemento externo. La Base de
Datos, o sistema de ficheros. Pero
empecemos por el test.
Utilizaremos el poderoso Spring Test Context para las pruebas de
integración. (Las siguientes pruebas se hicieron 1 a 1).
Implementamos (En realidad lo anterior
se hizo test a test. Pero para recortar lo
ponemos todo de hecho con la primera
ejecución nos dimos cuenta que
Account debía ser serializable y
debiamos implementar el equals y el
hashcode para comparar Accounts) .
En algunos casos, los tests de integración son bastante mas
lentos que los tests unitarios como vemos.
Ejecutamos la suite entera de tests
Persistiendo las transferencias
El servicio de transferencias ahora mismo no
persiste los datos. Debemos añadir esto a nuestra
aplicación. Lo añadimos en el Test, lo hacemos
compilar, y lo implementamos en el servicio. Con el
mismo procedimiento paso a paso hecho hasta ahora.
Al final obtenemos el siguiente resultado. Obteniendo
la barra verde.
Ejecutamos. Barra Verde
TDD el controlador.
ORG.PT.TDD.EXCEPTION 3 50% 6 12
18/20
ORG.PT.TDD.SERVICE 6 90%
Cobertura
Cobertura
Conclusiones
desarrollamos funciona.
Bibliografía
Preguntas