SlideShare una empresa de Scribd logo
Uzi Mamani Creative Commons (@uzigula)
Test Driven Development
Uzi Mamani
uzi.mamani@gmail.com
www.about.me/uzigula
2Uzi Mamani Creative Commons (@uzigula)
“I don’t have time to write
tests because I am too busy
debugging.”
3
¿Qué es Test Driven Development?
«TDD es escribir las pruebas
primero y dejar que estas
guíen o modifiquen el diseño»
Uzi Mamani Creative Commons (@uzigula)
4Uzi Mamani Creative Commons (@uzigula)
Dada la definición de TDD
¿Qué necesita usted para ponerlo en práctica?
Historias de Usuario
➢ Descripción : Un relato resumido que debe reflejar el que se
debe construir y por que.
➢ Conversaciones: Son los detalles que hay detrás de la
Historia, estas se generan durante las conversaciones con
por ejemplo el Product Owner.
➢ Validación : Criterios de Aceptación que permitan validar si
la Historia fue correctamente desarrollada.
5Uzi Mamani Creative Commons (@uzigula)
Ejemplo: Sitio Web de Viajes
6
Como un usuario, Deseo poder
reservar una habitación de Hotel
Como un usuario, Deseo poder
cancelar una reservación
Como un planificador de
Vacaciones, Deseo ver fotos de
los hoteles.
Como pasajero frecuente,
Deseo poder reutilizar una
reserva pasada, para así ahorrar
tiempo en mis reservas.
Uzi Mamani Creative Commons (@uzigula)
Criterios de Aceptación
7
Como un usuario, Deseo
poder cancelar una
reservación
✓ Un Miembro premium puede
cancelar una reserva el ultimo día
sin recargo.
✓ Un miembro no-premium se le
cobrará 10% si cancela el mismo
día de la reserva.
✓ Se debe enviar un Correo de
Confirmación.
✓ Se debe Notificar al Hotel de la
cancelación.
Uzi Mamani Creative Commons (@uzigula)
Test de Aceptación
Dado Juan usuario no-premium
Y Con una reserva para Hoy a las 19:00 con un valor s/. 500
Cuando Cancela la reserva
Entonces la reserva es cancelada
Y Juan debe pagar una penalidad de S/. 50.
(Ejemplo concreto)
8Uzi Mamani Creative Commons (@uzigula)
Ciclo de Test Driven Development
9
RED
Refact
or
Green
Uzi Mamani Creative Commons (@uzigula)
Kata : Stack
Se nos pide implementar un Pila.
1. La pila esta llena cuando se llega al total de elementos.
2. La pila es una estructura (LIFO – Last In First Out), por tanto
siempre se debe sacar el ultimo elemento ingresado a la pila
siempre cuando no este vacia.
10Uzi Mamani Creative Commons (@uzigula)
Pirámide de Testing
11Uzi Mamani Creative Commons (@uzigula)
¿Que es una prueba Unitaria?
Es una pieza de código automatizada, que invoca el método o
clase que está siendo testeada y verifica algunas asunciones
acerca del comportamiento lógico de dicho método o clase.
Generalmente escrito usando un framework de pruebas
unitarias, se ejecuta rápidamente, es completamente
automatizable, confiable, legible y mantenible.
12Uzi Mamani Creative Commons (@uzigula)
Como funciona un Test Unitario
13
Take it from The Art Of Unit Testing – Roy Osherove
2009
Uzi Mamani Creative Commons (@uzigula)
Ejemplo de Prueba Unitaria
14
@Test
public void IsValidFileName_validFile_ReturnsTrue()
{
//arrange
LogAnalyzer analyzer = new LogAnalyzer();
//act
bool result = analyzer.IsValidLogFileName("whatever.doc");
//assert
assertTrue(result, "filename should be valid!");
}
Uzi Mamani Creative Commons (@uzigula)
Características de las Pruebas Unitarias
✓ Fast
✓ Isolated
✓ Repetible
✓ Self-Verifying
✓ Timely
15Uzi Mamani Creative Commons (@uzigula)
Buenas prácticas de Pruebas Unitarias
16
1. Consistentes
2. Atómicos
3. Simple Responsabilidad
4. Auto Descriptivos
5. Los test no deben tener lógica
Uzi Mamani Creative Commons (@uzigula)
Buenas prácticas de Pruebas Unitarias
17
6. No manejan excepciones
7. Mensajes Claros
8. No mezclar el código
9. Separación por capa de negocio
10. Separación por tipo
Uzi Mamani Creative Commons (@uzigula)
Tres Leyes de Test Driven Development
1. You are not allowed to write any production code unless it
is to make a failing unit test pass.
2. You are not allowed to write any more of a unit test than is
sufficient to fail; and compilation failures are failures.
3. You are not allowed to write any more production code
than is sufficient to pass the one failing unit test.
18http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTddUzi Mamani Creative Commons (@uzigula)
Kata Login Api
Api de Autenticación
Como SysAdmin deseo un servicio que resuelva la
autenticación/autorización de un usuario a una determinada
aplicación, para así tener un único servicio de control de
acceso.
19Uzi Mamani Creative Commons (@uzigula)
Kata Login Api
Confirmación:
1. Acceso Autorizado
• Usuario y contraseña son válidos.
• Devolver un Response con el token de Autorización.
2. Acceso Denegado
• Usuario y/o contraseña no son válidos.
• Cuenta esta bloqueada.
• No tiene permisos para la aplicación solicitada.
• Servicio no esta disponible (falla infraestrutura)
20Uzi Mamani Creative Commons (@uzigula)
Enfoques para aplicar TDD en un
Desarrollo
21Uzi Mamani Creative Commons (@uzigula)
Outside-In
Se comienza con una clase o componente de alto nivel, se
mockean las dependencias necesarias. Cuando se ha finalizado
con el componente, nos movemos al colaborador previamente
mockeado y aplicamos TDD nuevamente ahí.
22
Mock
Collaborator
Collaborator
Class
User
Controller
Outer
Class
Model
System
Boundary
In
Out
Uzi Mamani Creative Commons (@uzigula)
Outside-In
Beneficios
• Permite pensar desde la perspectiva del usuario final, el
diseño está guiado por necesidades reales.
• Se construye incrementalmente partes completas de la
aplicación.
Desventajas
• Puede llevar al uso excesivo de mocks/stubs ocasionando
que las pruebas sean muy frágiles.
23Uzi Mamani Creative Commons (@uzigula)
Inside-Out
Comienza con una clase o componente de bajo nivel y se va
progresando a los de más alto nivel.
No utiliza mocking, debido a que los colaboradores son
previamente creados o se devuelven valores en duro.
24
Collaborator
Class
Collaborator
Class
User
Controller
Outer
Class
Model
System
Boundary
In
Out
Uzi Mamani Creative Commons (@uzigula)
Inside-Out
Beneficios
• Tiende a tener un mejor diseño.
Desventajas
• Puedes construir funcionalidad en las clases que nunca será
usada por la aplicación.
25Uzi Mamani Creative Commons (@uzigula)
Test Doubles e Isolation (Mock)
Frameworks
26Uzi Mamani Creative Commons (@uzigula)
Test Doubles
«Son todos aquellos objetos que
son creados para reemplazar a los
objetos reales con el propósito de
hacer pruebas »
27Uzi Mamani Creative Commons (@uzigula)
Isolation Mocking Frameworks
• Permiten crear test doubles de manera más simple, rápida y
sin errores.
• Ayudan a evitar escribir código repetitivo.
▪ .NET: Moq, RhinoMock, Typemock , Nsubstitute
▪ Java: Mockito, EasyMock, Jmock
▪ Ruby: RSpec Built-in, Mocha
28Uzi Mamani Creative Commons (@uzigula)
Test Doubles Stubs
• Reemplaza una dependencia existente en el sistema de tal
manera que el test no tenga que lidiar directamente con esa
dependencia.
• La prueba tiene el control sobre este test double, por lo que
puede indicarle respuestas predefinidas a ciertas llamadas.
• Son utilizados cuando nuestro método en prueba depende de
un valor que es retornado por otro componente.
29Uzi Mamani Creative Commons (@uzigula)
State Testing Vs Interaction Testing
State Testing (Result Driven)
Verificamos si un resultado final es el esperado.
Ejm: que una propiedad ha cambiado su valor.
Interaction Testing (Action Driven)
Verificamos si una determinada acción se ha producido.
Ejm: que se ha enviado un mensaje hacia otro objeto.
30Uzi Mamani Creative Commons (@uzigula)
Test Doubles Mocks
• No devuelve resultados predefinidos, sino está pendiente que
2 objetos hayan interactuado de manera esperada.
• El Assert ya no se ejecuta sobre la clase en prueba sino sobre
el mock.
• Lo usamos para probar acciones que no pueden ser
observadas a través de la API pública de la clase que se está
probando.
31Uzi Mamani Creative Commons (@uzigula)
Kata:
Login API , nuevo requerimiento
32Uzi Mamani Creative Commons (@uzigula)
Kata: Login Api (Nuevo requerimiento)
Se requiere implementar en el API de Autorizacion una opción
que permita resetear el password de un usuario registrado.
33Uzi Mamani Creative Commons (@uzigula)
Como diferenciamos Stubs de Mocks
✓ Un Stub permite que el test pueda terminar su ejecución.
(No falle)
✓ Un Mock es un test double sobre el cuál se realiza la
verificacion (aserción)
34Uzi Mamani Creative Commons (@uzigula)
Otros Test Doubles
Dummy:
Objetos que se encuentran instanciados pero nunca se utilizan,
usualmente usados para llenar una lista de parámetros
Fake :
Remplazan a la dependencia real por razones diferentes a
verificar salidas o comportamientos. Tienen la misma
funcionalidad pero más sencilla
35Uzi Mamani Creative Commons (@uzigula)
Kata:
Simulador de Créditos
36Uzi Mamani Creative Commons (@uzigula)
Simulador de Calendario de Pagos.
Como sectorista deseo poder obtener el reporte de simulador
de crédito de una solicitud, para así poder mostrar al cliente su
posible calendario de pagos.
La solicitud debe tener Monto Solicitado, Plazo en Meses,
Interés.
Considerar que pueden haber múltiples formas de calcular el
valor de una cuota
Por ahora las cuotas deberán ser calculadas usando Interés
simple
37Uzi Mamani Creative Commons (@uzigula)
Kata:
Tratemos con algo de
Tu Proyecto
38Uzi Mamani Creative Commons (@uzigula)
39
Don’t be a Cowboy
Uzi Mamani Creative Commons (@uzigula)
Uzi Mamani Creative Commons (@uzigula)
Test Driven Development
Uzi Mamani
uzi.mamani@gmail.com
www.about.me/uzigula

Más contenido relacionado

PDF
Conferencia Rails: Integracion Continua Y Rails
ODP
Introducción a Ganglia
PPTX
BDD: Descubriendo qué requiere realmente tu cliente
ODP
Introducción a LDAP
PDF
Alta disponibilidad con MySQL
PDF
Software Debt: Qué Es y Cómo Gestionarlo Holísticamente
PPTX
OAUTH introducción y entretenida explicación.
PDF
Escalabilidad y alto rendimiento con Symfony2
Conferencia Rails: Integracion Continua Y Rails
Introducción a Ganglia
BDD: Descubriendo qué requiere realmente tu cliente
Introducción a LDAP
Alta disponibilidad con MySQL
Software Debt: Qué Es y Cómo Gestionarlo Holísticamente
OAUTH introducción y entretenida explicación.
Escalabilidad y alto rendimiento con Symfony2

Destacado (10)

PDF
TDD with phpspec2
PDF
Continous Delivering a PHP application
PPTX
Maven Overview
PPTX
Automatizacion de proyectos con gradle
PDF
Integrando sonar
PPTX
Introducción a DDD
PDF
PhpSpec 2.0 ilustrated by examples
PPTX
Building and Deploying Application to Apache Mesos
PPTX
A new model for Docker image distribution
TDD with phpspec2
Continous Delivering a PHP application
Maven Overview
Automatizacion de proyectos con gradle
Integrando sonar
Introducción a DDD
PhpSpec 2.0 ilustrated by examples
Building and Deploying Application to Apache Mesos
A new model for Docker image distribution
Publicidad

Similar a Test Driven Development (20)

PPT
Test unitarios
PPTX
Unit Testing with Mock Objects
PPTX
pruebasunitarias-110921232512-phpapp02.pptx
PDF
presentacion de programacion Software testing.pdf
PDF
Taller de Simpletest - Drupal Day Valencia 2012
PDF
Buenasprcticas
PPTX
Test Automation .NET
PPSX
7iSF-4 test driver development
PDF
Pruebas unitarias
PDF
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
PDF
Introduction to unit testing
PDF
Integracion Continua
PPTX
Presentación Seminario1 EA
PDF
Presentación: xUnit y Junit
PDF
Vuelta_a_los_origines_Testing.pdf
PPTX
Unit testing consejos
PDF
PDF
leccion 3
PDF
Test unitarios
Unit Testing with Mock Objects
pruebasunitarias-110921232512-phpapp02.pptx
presentacion de programacion Software testing.pdf
Taller de Simpletest - Drupal Day Valencia 2012
Buenasprcticas
Test Automation .NET
7iSF-4 test driver development
Pruebas unitarias
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
Introduction to unit testing
Integracion Continua
Presentación Seminario1 EA
Presentación: xUnit y Junit
Vuelta_a_los_origines_Testing.pdf
Unit testing consejos
leccion 3
Publicidad

Más de Uzi Mamani Fernández (10)

PDF
Stop the agile micro-management
PDF
Agile distributed Teams in Large Enterprises
PDF
Historia de una adopción Ágile en una Entidad Financiera
PDF
Retrospectivas Ágiles
PDF
Daily Stand Up Meetings
PDF
Agile software development
PDF
The agile road - Tacna Agile Day 2012
PDF
Que es Scrum?
PDF
The Agile Road v2 - San Marcos Agile Week
PDF
The agile road - Piura Agile Day 2012
Stop the agile micro-management
Agile distributed Teams in Large Enterprises
Historia de una adopción Ágile en una Entidad Financiera
Retrospectivas Ágiles
Daily Stand Up Meetings
Agile software development
The agile road - Tacna Agile Day 2012
Que es Scrum?
The Agile Road v2 - San Marcos Agile Week
The agile road - Piura Agile Day 2012

Último (20)

PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PDF
Diapositiva proyecto de vida, materia catedra
PDF
Estrategia de apoyo tecnología miguel angel solis
PDF
Calidad desde el Docente y la mejora continua .pdf
PDF
SAP Transportation Management para LSP, TM140 Col18
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPTX
Sesion 1 de microsoft power point - Clase 1
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
taller de informática - LEY DE OHM
PPT
Que son las redes de computadores y sus partes
PPTX
Propuesta BKP servidores con Acronis1.pptx
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
CyberOps Associate - Cisco Networking Academy
historia_web de la creacion de un navegador_presentacion.pptx
El-Gobierno-Electrónico-En-El-Estado-Bolivia
Diapositiva proyecto de vida, materia catedra
Estrategia de apoyo tecnología miguel angel solis
Calidad desde el Docente y la mejora continua .pdf
SAP Transportation Management para LSP, TM140 Col18
Presentación PASANTIAS AuditorioOO..pptx
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Sesion 1 de microsoft power point - Clase 1
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
taller de informática - LEY DE OHM
Que son las redes de computadores y sus partes
Propuesta BKP servidores con Acronis1.pptx

Test Driven Development

  • 1. Uzi Mamani Creative Commons (@uzigula) Test Driven Development Uzi Mamani uzi.mamani@gmail.com www.about.me/uzigula
  • 2. 2Uzi Mamani Creative Commons (@uzigula) “I don’t have time to write tests because I am too busy debugging.”
  • 3. 3 ¿Qué es Test Driven Development? «TDD es escribir las pruebas primero y dejar que estas guíen o modifiquen el diseño» Uzi Mamani Creative Commons (@uzigula)
  • 4. 4Uzi Mamani Creative Commons (@uzigula) Dada la definición de TDD ¿Qué necesita usted para ponerlo en práctica?
  • 5. Historias de Usuario ➢ Descripción : Un relato resumido que debe reflejar el que se debe construir y por que. ➢ Conversaciones: Son los detalles que hay detrás de la Historia, estas se generan durante las conversaciones con por ejemplo el Product Owner. ➢ Validación : Criterios de Aceptación que permitan validar si la Historia fue correctamente desarrollada. 5Uzi Mamani Creative Commons (@uzigula)
  • 6. Ejemplo: Sitio Web de Viajes 6 Como un usuario, Deseo poder reservar una habitación de Hotel Como un usuario, Deseo poder cancelar una reservación Como un planificador de Vacaciones, Deseo ver fotos de los hoteles. Como pasajero frecuente, Deseo poder reutilizar una reserva pasada, para así ahorrar tiempo en mis reservas. Uzi Mamani Creative Commons (@uzigula)
  • 7. Criterios de Aceptación 7 Como un usuario, Deseo poder cancelar una reservación ✓ Un Miembro premium puede cancelar una reserva el ultimo día sin recargo. ✓ Un miembro no-premium se le cobrará 10% si cancela el mismo día de la reserva. ✓ Se debe enviar un Correo de Confirmación. ✓ Se debe Notificar al Hotel de la cancelación. Uzi Mamani Creative Commons (@uzigula)
  • 8. Test de Aceptación Dado Juan usuario no-premium Y Con una reserva para Hoy a las 19:00 con un valor s/. 500 Cuando Cancela la reserva Entonces la reserva es cancelada Y Juan debe pagar una penalidad de S/. 50. (Ejemplo concreto) 8Uzi Mamani Creative Commons (@uzigula)
  • 9. Ciclo de Test Driven Development 9 RED Refact or Green Uzi Mamani Creative Commons (@uzigula)
  • 10. Kata : Stack Se nos pide implementar un Pila. 1. La pila esta llena cuando se llega al total de elementos. 2. La pila es una estructura (LIFO – Last In First Out), por tanto siempre se debe sacar el ultimo elemento ingresado a la pila siempre cuando no este vacia. 10Uzi Mamani Creative Commons (@uzigula)
  • 11. Pirámide de Testing 11Uzi Mamani Creative Commons (@uzigula)
  • 12. ¿Que es una prueba Unitaria? Es una pieza de código automatizada, que invoca el método o clase que está siendo testeada y verifica algunas asunciones acerca del comportamiento lógico de dicho método o clase. Generalmente escrito usando un framework de pruebas unitarias, se ejecuta rápidamente, es completamente automatizable, confiable, legible y mantenible. 12Uzi Mamani Creative Commons (@uzigula)
  • 13. Como funciona un Test Unitario 13 Take it from The Art Of Unit Testing – Roy Osherove 2009 Uzi Mamani Creative Commons (@uzigula)
  • 14. Ejemplo de Prueba Unitaria 14 @Test public void IsValidFileName_validFile_ReturnsTrue() { //arrange LogAnalyzer analyzer = new LogAnalyzer(); //act bool result = analyzer.IsValidLogFileName("whatever.doc"); //assert assertTrue(result, "filename should be valid!"); } Uzi Mamani Creative Commons (@uzigula)
  • 15. Características de las Pruebas Unitarias ✓ Fast ✓ Isolated ✓ Repetible ✓ Self-Verifying ✓ Timely 15Uzi Mamani Creative Commons (@uzigula)
  • 16. Buenas prácticas de Pruebas Unitarias 16 1. Consistentes 2. Atómicos 3. Simple Responsabilidad 4. Auto Descriptivos 5. Los test no deben tener lógica Uzi Mamani Creative Commons (@uzigula)
  • 17. Buenas prácticas de Pruebas Unitarias 17 6. No manejan excepciones 7. Mensajes Claros 8. No mezclar el código 9. Separación por capa de negocio 10. Separación por tipo Uzi Mamani Creative Commons (@uzigula)
  • 18. Tres Leyes de Test Driven Development 1. You are not allowed to write any production code unless it is to make a failing unit test pass. 2. You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures. 3. You are not allowed to write any more production code than is sufficient to pass the one failing unit test. 18http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTddUzi Mamani Creative Commons (@uzigula)
  • 19. Kata Login Api Api de Autenticación Como SysAdmin deseo un servicio que resuelva la autenticación/autorización de un usuario a una determinada aplicación, para así tener un único servicio de control de acceso. 19Uzi Mamani Creative Commons (@uzigula)
  • 20. Kata Login Api Confirmación: 1. Acceso Autorizado • Usuario y contraseña son válidos. • Devolver un Response con el token de Autorización. 2. Acceso Denegado • Usuario y/o contraseña no son válidos. • Cuenta esta bloqueada. • No tiene permisos para la aplicación solicitada. • Servicio no esta disponible (falla infraestrutura) 20Uzi Mamani Creative Commons (@uzigula)
  • 21. Enfoques para aplicar TDD en un Desarrollo 21Uzi Mamani Creative Commons (@uzigula)
  • 22. Outside-In Se comienza con una clase o componente de alto nivel, se mockean las dependencias necesarias. Cuando se ha finalizado con el componente, nos movemos al colaborador previamente mockeado y aplicamos TDD nuevamente ahí. 22 Mock Collaborator Collaborator Class User Controller Outer Class Model System Boundary In Out Uzi Mamani Creative Commons (@uzigula)
  • 23. Outside-In Beneficios • Permite pensar desde la perspectiva del usuario final, el diseño está guiado por necesidades reales. • Se construye incrementalmente partes completas de la aplicación. Desventajas • Puede llevar al uso excesivo de mocks/stubs ocasionando que las pruebas sean muy frágiles. 23Uzi Mamani Creative Commons (@uzigula)
  • 24. Inside-Out Comienza con una clase o componente de bajo nivel y se va progresando a los de más alto nivel. No utiliza mocking, debido a que los colaboradores son previamente creados o se devuelven valores en duro. 24 Collaborator Class Collaborator Class User Controller Outer Class Model System Boundary In Out Uzi Mamani Creative Commons (@uzigula)
  • 25. Inside-Out Beneficios • Tiende a tener un mejor diseño. Desventajas • Puedes construir funcionalidad en las clases que nunca será usada por la aplicación. 25Uzi Mamani Creative Commons (@uzigula)
  • 26. Test Doubles e Isolation (Mock) Frameworks 26Uzi Mamani Creative Commons (@uzigula)
  • 27. Test Doubles «Son todos aquellos objetos que son creados para reemplazar a los objetos reales con el propósito de hacer pruebas » 27Uzi Mamani Creative Commons (@uzigula)
  • 28. Isolation Mocking Frameworks • Permiten crear test doubles de manera más simple, rápida y sin errores. • Ayudan a evitar escribir código repetitivo. ▪ .NET: Moq, RhinoMock, Typemock , Nsubstitute ▪ Java: Mockito, EasyMock, Jmock ▪ Ruby: RSpec Built-in, Mocha 28Uzi Mamani Creative Commons (@uzigula)
  • 29. Test Doubles Stubs • Reemplaza una dependencia existente en el sistema de tal manera que el test no tenga que lidiar directamente con esa dependencia. • La prueba tiene el control sobre este test double, por lo que puede indicarle respuestas predefinidas a ciertas llamadas. • Son utilizados cuando nuestro método en prueba depende de un valor que es retornado por otro componente. 29Uzi Mamani Creative Commons (@uzigula)
  • 30. State Testing Vs Interaction Testing State Testing (Result Driven) Verificamos si un resultado final es el esperado. Ejm: que una propiedad ha cambiado su valor. Interaction Testing (Action Driven) Verificamos si una determinada acción se ha producido. Ejm: que se ha enviado un mensaje hacia otro objeto. 30Uzi Mamani Creative Commons (@uzigula)
  • 31. Test Doubles Mocks • No devuelve resultados predefinidos, sino está pendiente que 2 objetos hayan interactuado de manera esperada. • El Assert ya no se ejecuta sobre la clase en prueba sino sobre el mock. • Lo usamos para probar acciones que no pueden ser observadas a través de la API pública de la clase que se está probando. 31Uzi Mamani Creative Commons (@uzigula)
  • 32. Kata: Login API , nuevo requerimiento 32Uzi Mamani Creative Commons (@uzigula)
  • 33. Kata: Login Api (Nuevo requerimiento) Se requiere implementar en el API de Autorizacion una opción que permita resetear el password de un usuario registrado. 33Uzi Mamani Creative Commons (@uzigula)
  • 34. Como diferenciamos Stubs de Mocks ✓ Un Stub permite que el test pueda terminar su ejecución. (No falle) ✓ Un Mock es un test double sobre el cuál se realiza la verificacion (aserción) 34Uzi Mamani Creative Commons (@uzigula)
  • 35. Otros Test Doubles Dummy: Objetos que se encuentran instanciados pero nunca se utilizan, usualmente usados para llenar una lista de parámetros Fake : Remplazan a la dependencia real por razones diferentes a verificar salidas o comportamientos. Tienen la misma funcionalidad pero más sencilla 35Uzi Mamani Creative Commons (@uzigula)
  • 36. Kata: Simulador de Créditos 36Uzi Mamani Creative Commons (@uzigula)
  • 37. Simulador de Calendario de Pagos. Como sectorista deseo poder obtener el reporte de simulador de crédito de una solicitud, para así poder mostrar al cliente su posible calendario de pagos. La solicitud debe tener Monto Solicitado, Plazo en Meses, Interés. Considerar que pueden haber múltiples formas de calcular el valor de una cuota Por ahora las cuotas deberán ser calculadas usando Interés simple 37Uzi Mamani Creative Commons (@uzigula)
  • 38. Kata: Tratemos con algo de Tu Proyecto 38Uzi Mamani Creative Commons (@uzigula)
  • 39. 39 Don’t be a Cowboy Uzi Mamani Creative Commons (@uzigula)
  • 40. Uzi Mamani Creative Commons (@uzigula) Test Driven Development Uzi Mamani uzi.mamani@gmail.com www.about.me/uzigula