SlideShare una empresa de Scribd logo
1 de 38
Workshop
ASP.NET MVC
Día 2
Rodolfo Finochietti
MVP ASP.NET/IIS
Lagash Systems
rodolfof@lagash.com
@rodolfof
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 Repositorio DB
Test Scope
¿Como limitar el scope?
Controller Servicio Repositorio DBRepositorio
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, 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
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
Planificar
Diseñar
Ejecutar
Evaluar
Planificar
Diseñar
Ejecutar
Evaluar
Ejecutar
Evaluar
Cascada Prototipos
Planificar
Diseñar
Ejecutar
Evaluar
Cíclico
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
¿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 Test
Inyección de dependencias
Mocking
TDD
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
Contacto
• Mail:
– rodolfof@lagash.com
• Blogs:
– http://shockbyte.net
• Twitter:
– @rodolfof
¡Gracias!

Más contenido relacionado

La actualidad más candente

Mvc + html5 + css3
Mvc + html5 + css3Mvc + html5 + css3
Mvc + html5 + css3
Marc Rubiño
 

La actualidad más candente (20)

ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5
 
ASP.NET MVC (2011)
ASP.NET MVC (2011)ASP.NET MVC (2011)
ASP.NET MVC (2011)
 
Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6
 
ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3
 
Mvc4 Intro
Mvc4 IntroMvc4 Intro
Mvc4 Intro
 
Azure API Management
Azure API ManagementAzure API Management
Azure API Management
 
Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010
Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010
Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010
 
Mvc + html5 + css3
Mvc + html5 + css3Mvc + html5 + css3
Mvc + html5 + css3
 
ASP.NET MVC Core
ASP.NET MVC CoreASP.NET MVC Core
ASP.NET MVC Core
 
Security in MVC Core by Hugo Biarge
Security in MVC Core by Hugo BiargeSecurity in MVC Core by Hugo Biarge
Security in MVC Core by Hugo Biarge
 
Asp.Net Core 1.0 Deep Dive
Asp.Net Core 1.0 Deep DiveAsp.Net Core 1.0 Deep Dive
Asp.Net Core 1.0 Deep Dive
 
Integrando AngularJS y drupal
Integrando AngularJS y drupalIntegrando AngularJS y drupal
Integrando AngularJS y drupal
 
Plainconcepts .Net Core Event - Real Time Applications
Plainconcepts .Net Core Event - Real Time ApplicationsPlainconcepts .Net Core Event - Real Time Applications
Plainconcepts .Net Core Event - Real Time Applications
 
Webinar: Introducción a Angular
Webinar: Introducción a AngularWebinar: Introducción a Angular
Webinar: Introducción a Angular
 
Presentación Spring Boot en Autentia
Presentación Spring Boot en AutentiaPresentación Spring Boot en Autentia
Presentación Spring Boot en Autentia
 
Creando APIs REST con Spring Boot
Creando APIs REST con Spring BootCreando APIs REST con Spring Boot
Creando APIs REST con Spring Boot
 
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverPrueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
 
Desarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webDesarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones web
 
Sp fx connecting to share point & react lifecycle
Sp fx connecting to share point & react lifecycleSp fx connecting to share point & react lifecycle
Sp fx connecting to share point & react lifecycle
 

Similar a ASP.NET MVC Workshop Día 2

.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup
 
20180313 Keep Calm And Test Your Code RiojaDotNet
20180313 Keep Calm And Test Your Code RiojaDotNet20180313 Keep Calm And Test Your Code RiojaDotNet
20180313 Keep Calm And Test Your Code RiojaDotNet
albertortizcape
 
Introducción a testing en php
Introducción a testing en phpIntroducción a testing en php
Introducción a testing en php
Ismael Ambrosi
 

Similar a ASP.NET MVC Workshop Día 2 (20)

Pruebas automaticas
Pruebas automaticasPruebas automaticas
Pruebas automaticas
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 
Practicas tecnicas
Practicas tecnicasPracticas tecnicas
Practicas tecnicas
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Practicas técnicas
Practicas técnicasPracticas técnicas
Practicas técnicas
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Charla en Universidad ORT 2014 - Testing técnico (automatización, mobile, pe...
 Charla en Universidad ORT 2014 - Testing técnico (automatización, mobile, pe... Charla en Universidad ORT 2014 - Testing técnico (automatización, mobile, pe...
Charla en Universidad ORT 2014 - Testing técnico (automatización, mobile, pe...
 
Testing técnico - Automatización en web y mobile para pruebas funcionales y p...
Testing técnico - Automatización en web y mobile para pruebas funcionales y p...Testing técnico - Automatización en web y mobile para pruebas funcionales y p...
Testing técnico - Automatización en web y mobile para pruebas funcionales y p...
 
Automatizacion de Pruebas
Automatizacion de PruebasAutomatizacion de Pruebas
Automatizacion de Pruebas
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas
 
20180313 Keep Calm And Test Your Code RiojaDotNet
20180313 Keep Calm And Test Your Code RiojaDotNet20180313 Keep Calm And Test Your Code RiojaDotNet
20180313 Keep Calm And Test Your Code RiojaDotNet
 
Pruebas unitarias 7mo -b
Pruebas unitarias   7mo -bPruebas unitarias   7mo -b
Pruebas unitarias 7mo -b
 
Espoch
EspochEspoch
Espoch
 
INDUCCION A QA TESTER.pptx
INDUCCION A QA TESTER.pptxINDUCCION A QA TESTER.pptx
INDUCCION A QA TESTER.pptx
 
Clean code 9
Clean code 9Clean code 9
Clean code 9
 
TDD
TDDTDD
TDD
 
Introducción a testing en php
Introducción a testing en phpIntroducción a testing en php
Introducción a testing en php
 
Automatización de pruebas funcionales
Automatización de pruebas funcionalesAutomatización de pruebas funcionales
Automatización de pruebas funcionales
 
¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?
 
03 proceso de desarrollo de software
03 proceso de desarrollo de software03 proceso de desarrollo de software
03 proceso de desarrollo de software
 

Más de Rodolfo Finochietti

Que hay de nuevo en 2013 en la plataforma Microsoft para desarrolladores
Que hay de nuevo en 2013 en la plataforma Microsoft para desarrolladoresQue hay de nuevo en 2013 en la plataforma Microsoft para desarrolladores
Que hay de nuevo en 2013 en la plataforma Microsoft para desarrolladores
Rodolfo Finochietti
 

Más de Rodolfo Finochietti (20)

Introduction to Rust language programming
Introduction to Rust language programmingIntroduction to Rust language programming
Introduction to Rust language programming
 
C#: Past, Present and Future
C#: Past, Present and FutureC#: Past, Present and Future
C#: Past, Present and Future
 
Go
GoGo
Go
 
Re-bot-lution
Re-bot-lutionRe-bot-lution
Re-bot-lution
 
Azure Functions
Azure FunctionsAzure Functions
Azure Functions
 
Despliegue y Monitoreo de aplicaciones ASP.NET Core en Linux
Despliegue y Monitoreo de aplicaciones ASP.NET Core en LinuxDespliegue y Monitoreo de aplicaciones ASP.NET Core en Linux
Despliegue y Monitoreo de aplicaciones ASP.NET Core en Linux
 
ASP.NET Core 1.0
ASP.NET Core 1.0ASP.NET Core 1.0
ASP.NET Core 1.0
 
Azure IoT Hub
Azure IoT HubAzure IoT Hub
Azure IoT Hub
 
Introduccion a Node.js
Introduccion a Node.jsIntroduccion a Node.js
Introduccion a Node.js
 
IoT y Dispositivos
IoT y DispositivosIoT y Dispositivos
IoT y Dispositivos
 
.NET Multiplataforma
.NET Multiplataforma .NET Multiplataforma
.NET Multiplataforma
 
Windows 10 Developer Readiness
Windows 10 Developer ReadinessWindows 10 Developer Readiness
Windows 10 Developer Readiness
 
Aplicaciones Real-Time con SignalR
Aplicaciones Real-Time con SignalRAplicaciones Real-Time con SignalR
Aplicaciones Real-Time con SignalR
 
ASP.NET 5
ASP.NET 5ASP.NET 5
ASP.NET 5
 
Roslyn: el futuro de C#
Roslyn: el futuro de C#Roslyn: el futuro de C#
Roslyn: el futuro de C#
 
Microsoft 2014 Dev Plataform - Roslyn -& ASP.NET vNext
Microsoft 2014 Dev Plataform -  Roslyn -& ASP.NET vNextMicrosoft 2014 Dev Plataform -  Roslyn -& ASP.NET vNext
Microsoft 2014 Dev Plataform - Roslyn -& ASP.NET vNext
 
Que hay de nuevo en Visual Studio 2013 y ASP.NET 5.1
Que hay de nuevo en Visual Studio 2013 y ASP.NET 5.1Que hay de nuevo en Visual Studio 2013 y ASP.NET 5.1
Que hay de nuevo en Visual Studio 2013 y ASP.NET 5.1
 
Proyectos de Base de Datos con Visual Studio 2013
Proyectos de Base de Datos con Visual Studio 2013Proyectos de Base de Datos con Visual Studio 2013
Proyectos de Base de Datos con Visual Studio 2013
 
ALM con Visual Studio y TFS 2013
ALM con Visual Studio y TFS 2013ALM con Visual Studio y TFS 2013
ALM con Visual Studio y TFS 2013
 
Que hay de nuevo en 2013 en la plataforma Microsoft para desarrolladores
Que hay de nuevo en 2013 en la plataforma Microsoft para desarrolladoresQue hay de nuevo en 2013 en la plataforma Microsoft para desarrolladores
Que hay de nuevo en 2013 en la plataforma Microsoft para desarrolladores
 

Último

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Último (11)

EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

ASP.NET MVC Workshop Día 2

  • 1. Workshop ASP.NET MVC Día 2 Rodolfo Finochietti MVP ASP.NET/IIS Lagash Systems rodolfof@lagash.com @rodolfof
  • 2. Agenda • Diseño guiado por pruebas – Unit Testing – Mocking – Inyección de dependencias – TDD • Data Validation
  • 4. ¿Qué es un Test?
  • 5. Tipos de Tests Unitario Integración
  • 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
  • 9. Test Scope ¿Como limitar el scope? Controller Servicio Repositorio DB
  • 10. Test Scope ¿Como limitar el scope? Controller Servicio Repositorio DBRepositorio Falso
  • 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
  • 28. Demo Unit Test Inyección de dependencias Mocking TDD
  • 31. Todo se especifica en el modelo
  • 32. Todo se especifica en el modelo
  • 33. Código en la vista
  • 34. Que se transforma en HTML y JavaScript no intrusivo
  • 37. Contacto • Mail: – rodolfof@lagash.com • Blogs: – http://shockbyte.net • Twitter: – @rodolfof