6. Test unitario
• Prueba los componentes por separado
• Independiente
• Prueba un solo aspecto / funcionalidad
• Atómico y transaccional
7. Test de Integración
• Prueba integración entre varios componentes
• Independiente
• Prueba un solo aspecto / funcionalidad
• Atómico y transaccional
8. Scope Test de Integración
Vista Controller Servicio Entidad Repositorio
Scope Test
Unitario
Scope Test
Unitario
Scope Test
Unitario
La diferencia esta en el scope
Vista Controller Servicio Entidad Repositorio
17. Anti-patterns
• Test que prueben mas de una situación
• Test dependientes / ejecución en orden
• Test con aserciones débiles / humanas
• Try Catch
18. TDD
“En el largo plazo todos estaremos muertos”
John Maynard Keynes
19. ¿Que es TDD?
• Es una técnica en la que se escriben los casos
de prueba primero y luego el código aplicativo
• Las pruebas guían o dictan el código que se
desarrolla
• Las pruebas son una indicación de intención
– Son un especificación de que es lo que hace el
código
– Son un parte importante de la documentación
20. Orígenes
• Ambientes de objetos puros
– Reducir el tiempo invertido de pruebas
• Metodologías agiles
• Proceso de pruebas
– Falta de metodologías de pruebas de caja blanca
– Necesidad de asegurar la calidad desde el
comienzo
– Métricas mas difíciles de obtener
21. Red, Green, Refactor
Escribir un test
Compilar
Hacer que compile
Ejecutar el test,
y ver como falla
Escribir solo código
necesario para pasar el
test
Ejecutar el test,
y ver como pasa
Refactorizar el código
22. Reglas Generales
• Siempre se programan las pruebas y luego se
programan el código que satisface las pruebas
– Solo se escribe código si evita que algún test falle
– Un test unitario solo debe interactuar con el código
– Si se detecta un bug, su reporte debe referenciar a
una prueba que falle
• Las prueba deben poder ejecutarse y evaluarse
automáticamente
• El código de las pruebas tiene la misma
importancia que el código de la aplicación
– Evoluciona, se versiona, etc.
• TDD no reemplaza al testing tradicional
23. Ciclo de vida abstracto
Planificar
Diseñar
Ejecutar
Evaluar
24. Modelos de ciclo de vida
Planificar
Diseñar
Ejecutar
Evaluar
Planificar
Diseñar
Ejecutar
Evaluar
Ejecutar
Evaluar
Cascada Prototipos
Planificar
Diseñar
Ejecutar
Evaluar
Cíclico
25. Diseña
Etapas en TDD
Escribir un test
Compilar
Hacer que compile
Ejecutar el test,
y ver como falla
Escribir solo código
necesario para pasar los
tests que fallan
Ejecutar el test,
y ver como pasa
Refactorizar el código
Diseñar
Ejecutar Diseñar
Evaluar
26. ¿Qué es el refactoring?
• "Refactoring is the process of changing a
software system in such a way that it does not
alter the external behavior of the code yet
improves its internal structure“ Martin Fowler
• Típicamente se hace en pequeños pasos
• Hay menos riesgo de que el sistema se
“rompa”
• Esta técnica evita las “parálisis”
27. Refactorings
• Add Parameter
• Change Bidirectional Association to
Unidirectional
• Change Reference to Value
• Change Unidirectional Association to
Bidirectional
• Change Value to Reference
• Collapse Hierarchy
• Consolidate Conditional Expression
• Consolidate Duplicate Conditional
Fragments
• Convert Dynamic to Static
Construction
• Convert Static to Dynamic
Construction
•Form Template Method
•Hide Delegate
•Decompose Conditional
•Duplicate Observed Data
•Encapsulate Collection
•Encapsulate Downcast
•Encapsulate Field
•Extract Class
•Extract Interface
•Extract Method
•Extract Package
•Extract Subclass
•Extract Superclass