Mortal Kombat! ASP.NET MVC vs ASP.NET Webforms – ASP.NET MVC is amazing
ASP.NET MVC Workshop Día 2
-
Upload
rodolfo-finochietti -
Category
Technology
-
view
4.211 -
download
4
description
Transcript of ASP.NET MVC Workshop Día 2
Agenda
• Diseño guiado por pruebas– Unit Testing– Mocking– Inyección de dependencias– TDD
• Data Validation
Diseño guiado por pruebas
¿Qué es un Test?
Tipos de Tests
Unitario Integración
Test unitario
• Prueba los componentes por separado
• Independiente
• Prueba un solo aspecto / funcionalidad
• Atómico y transaccional
Test de Integración
• Prueba integración entre varios componentes
• Independiente
• Prueba un solo aspecto / funcionalidad
• Atómico y transaccional
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
Test Scope
¿Como limitar el scope?
Controller
Servicio
Test Scope
¿Como limitar el scope?
Controller
Servicio
Repositorio Falso
Inyección de dependencia
Inyección de dependencia
Inyección de dependencia
Inyección de dependencia
Inyección de dependencia
Unit Test Pattern
Setup
Ejecución
Verificación
Anti-patterns
• Test que prueben mas de una situación
• Test dependientes / ejecución en orden
• Test con aserciones débiles / humanas
• Try Catch
TDD
“En el largo plazo todos estaremos muertos”
John Maynard Keynes
¿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
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
Red, Green, RefactorEscribir un test
Compilar
Hacer que compile
Ejecutar el test,y ver como falla
Escribir solo códigonecesario para pasar el
test
Ejecutar el test,y ver como pasa
Refactorizar el código
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
Ciclo de vida abstracto
Planificar
Diseñar
Ejecutar
Evaluar
Modelos de ciclo de vida
PlanificarDiseñar
EjecutarEvaluar
Planificar
Diseñar
Ejecutar
Evaluar
Ejecutar
Evaluar
Cascada Prototipos
Planificar
Diseñar
Ejecutar
Evaluar
Cíclico
Diseña
Etapas en TDDEscribir un test
Compilar
Hacer que compile
Ejecutar el test,y ver como falla
Escribir solo códigonecesario para pasar los
tests que fallan
Ejecutar el test,y ver como pasa
Refactorizar el código
Diseñar
Ejecutar Diseñar
Evaluar
¿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”
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
Demo
Unit TestInyección de dependencias
MockingTDD
Work Time
Data Validation
Todo se especifica en el modelo
Todo se especifica en el modelo
Código en la vista
Que se transforma en HTML y JavaScript no intrusivo
Demo
Data Validation
Work Time
¡Gracias!