SlideShare una empresa de Scribd logo
1 de 38
Test Unitarios Diseño al cubo : Plan TDD Donostia, 06/05/2011
Plan TDD Test unitarios ,[object Object],[object Object],[object Object],[object Object],[object Object]
Formación test unitarios Test unitarios ,[object Object],[object Object],[object Object],[object Object],[object Object]
Formación test unitarios Test unitarios ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Formación test unitarios Test unitarios ,[object Object],Frente Frente Frente Frente Test de aceptación Test de integración Test de rendimiento  Test unitarios Software
Formación test unitarios Test unitarios ,[object Object],[object Object],[object Object],[object Object],[object Object]
Formación test unitarios Test unitarios ,[object Object],Qué es una prueba unitaria? Una prueba unitaria es una pieza de código escrito por un desarrollador  que prueba una pequeña área específica de la funcionalidad del código
Formación test unitarios Test unitarios ,[object Object]
Formación test unitarios Test unitarios ,[object Object],Escusas para no hacer test unitario - Cuesta mucho tiempo hacer los test  - Cuesta mucho tiempo ejecutar los test - No es mi trabajo testear mi código  - Ya compila... no vale?  - Cuesta mucho tiempo hacer los test  - A mi me pagan por escribir código, no por  escribir tests
Formación test unitarios Test unitarios ,[object Object],Beneficios de hacer test unitarios - Mejora el diseño de la implementación  - Reduce el tiempo invertido debuggeando  - Se gana “seguridad” en los cambios  -  Te hace la vida más fácil y tranquila  - Ayuda a documentar el código  - Se pone el código en situaciones extremas
Formación test unitarios Test unitarios ,[object Object],Estructura de un test - Preparar y configurar el estado necesario para realizar el test - Realizar la llamada al método que se quiere testear - Verificar el resultado obtenido A rrange A ct A ssert
Formación test unitarios Test unitarios ,[object Object],Propiedades de un buen test -  A utomatic:  los tests se deben ejecutar automáticamente -  T horough:  exaustivos, se prueba todo que sea sensible al fallo -  R epeatable:  ejecutar el test una y otra vez, con el mismo resultado  -  I ndependent:  Independiente entre los otros test y del entorno -  P rofessional:  Debe ser código como si fuera producción
Formación test unitarios Test unitarios ,[object Object],Qué testear? -  Right :  Si el código se ejecuta correctamente, ¿cómo lo sé? Right-BICEP -  B oundary :  Probar condiciones límite, muchos “bugs” viven allí -  I nverse :  Testear la lógica inversa si es posible -  C ross-check :  Cotejar los resultados utilizando diferentes medios   -  E rror conditions :  Forzar las situaciones de error  -  P erformance :  Probar las características de rendimiento si requiere
Formación test unitarios Test unitarios Ejemplo  de clase :
Formación test unitarios Test unitarios Ejemplo de test:
Formación test unitarios Test unitarios Ejemplo de test:
Formación test unitarios Test unitarios ,[object Object],[object Object],[object Object],[object Object],[object Object]
Plan TDD Dobles de prueba Un doble de prueba es un objeto que no es el real y  que usamos para poder probar una funcionalidad aislándonos del resto de los objetos del sistema ¿Qué son los doble de prueba?
Plan TDD Tipos de doble de prueba (o roles) ,[object Object],[object Object],[object Object],[object Object],[object Object],Dobles de prueba
Plan TDD Dobles de prueba Frameworks para trabajar con dobles de prueba ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Plan TDD Dobles de prueba Un  stub  es un objeto que programamos para que nos devuelva lo que nos de la gana y poder probar cómo reacciona nuestro código ante los distintos valores de respuesta del colaborador en cuestión Stubs
Plan TDD Dobles de prueba Ejemplo de stub  (usando mockito) public class CompraTest { Producto unProductoStub =  mock (Producto.class); Producto otroProductoStub =  mock (Producto.class); PasarelaDePago pasarelaDePagoStub =  mock (PasarelaDePago.class); Compra compra = new Compra(pasarelaDePagoStub); @Test public void  si_el_cliente_tiene_fondos_para_realizar_la_compra_la_puedo_confirmar() { when (unProductoStub.precio()). thenReturn (50); when (otroProductoStub.precio()). thenReturn (25); when (pasarelaDePagoStub.tieneElUsuarioFondosPorValorDe(75)). thenReturn (true); compra.anadir(unProductoStub); compra.anadir(otroProductoStub); assertTrue(compra.confirmar()); } }
Plan TDD ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Dobles de prueba
Plan TDD Dobles de prueba Mocks Un  mock  es un doble que nos sirve para verificar salidas indirectas del objeto que estamos probando
Plan TDD Dobles de prueba Ejemplo de mock  (usando easyMock) public class CompraTestMocks { PasarelaDePago pasarelaDePagoMock = createMock(PasarelaDePago.class); Producto unProductoStub = createMock(Producto.class); Compra compra = new Compra(pasarelaDePagoMock); @Test public void  si_el_cliente_tiene_fondos_para_realizar_la_compra_tengo_que_cobrarle_a_traves_de_la_pasarela_de_pago() { expect (unProductoStub.precio()). andReturn (50); expect (pasarelaDePagoMock.tieneElUsuarioFondosPorValorDe(50)). andReturn (true); pasarelaDePagoMock.cobrar(50); replay (pasarelaDePagoMock); replay (unProductoStub); compra.anadir(unProductoStub); compra.confirmar(); verify (pasarelaDePagoMock); } }
Plan TDD boolean confirmar() { int elPrecioDeLaCompra = precio(); boolean tieneElUsuarioFondos = pasarelaDePago.tieneElUsuarioFondosPorValorDe(elPrecioDeLaCompra); if (tieneElUsuarioFondos){ pasarelaDePago.cobrar(elPrecioDeLaCompra); } return tieneElUsuarioFondos; } Dobles de prueba
Plan TDD Dobles de prueba Spies Al igual que los  mocks , los  spies  sirven para hacer comprobaciones sobre salidas indirectas. La diferencia es que con un  Spy  lo que hacemos es después de ejecutar el método a probar verificar si sobre el doble se ha invocado a tal o cual método
Plan TDD Dobles de prueba Ejemplo de Spy  (usando mockito) public class CompraTestSpies { PasarelaDePago pasarelaDePagoSpy =  mock (PasarelaDePago.class); Producto unProductoStub =  mock (Producto.class); Compra compra = new Compra(pasarelaDePagoSpy); @Test public void si_el_cliente_tiene_fondos_para_realizar_la_compra_tengo_que_cobrarle_a_traves_de_la_pasarela_de_pago() { when (unProductoStub.precio()). thenReturn (50); when (pasarelaDePagoSpy.tieneElUsuarioFondosPorValorDe(50)). thenReturn (false); compra.anadir(unProductoStub); compra.confirmar(); verify (pasarelaDePagoSpy).cobrar(50); } }
Plan TDD Dobles de prueba Entonces ¿Mocks o Spies?
Plan TDD Dobles de prueba Fakes Un  fake  es una implementación falsa de un determinado interfaz, más simple normalmente, con el objetivo de hacer que el test se pueda ejecutar más rápido o sin dependencias de un sistema externo.  Por ejemplo un  fake  de un objeto que acceda a la persistencia podría ser una implementación en memoria del mismo objeto.
Plan TDD Dobles de prueba Dummy Un  dummy  es simplemente cuando el objeto a probar tiene algún colaborador que no vamos a utilizar en este test, entonces se le pasa un  dummy  que puede ser simplemente un nulo
Plan TDD Webs de referencia Mock Sucks http://www.testingtv.com/2010/12/20/mocks-suck-and-what-to-do-about-it/ Java Mock Frameworks Comparison http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html Diferencias entre mocks y stubs http://theproc.es/2009/5/21/658/diferencias-entre-mocks-y-stubs Escribiendo mejores tests http://weblogs.javahispano.org/artesanodeprimera/entry/escribiendo_mejores_test_iii_mocking Dobles de prueba
Formación test unitarios Test unitarios ,[object Object],[object Object],[object Object],[object Object],[object Object]
Formación test unitarios Test unitarios ,[object Object],[object Object],[object Object]
Formación test unitarios Test unitarios ,[object Object],[object Object],[object Object]
Formación test unitarios Test unitarios ,[object Object],[object Object],[object Object]
Formación test unitarios Test unitarios ¡Nos vemos en 15 días!
Ruben Egiluz Software Engineer Ivan Rodriguez Software Engineer Donewtech Solutions, S.L. Zubiberri Bidea 31 Edificio Urumea 20018 Donostia – San Sebastián +34 943 223 031 www.donewtech.com ¡¡Gracias!!

Más contenido relacionado

La actualidad más candente

Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)paramisoft
 
Testing in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkTesting in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkArulalan T
 
Analisis y especificacion de requerimientos
Analisis y especificacion de requerimientosAnalisis y especificacion de requerimientos
Analisis y especificacion de requerimientosUPTP
 
IIS Unidad1: Introducción a la Ingeniería de Software
IIS Unidad1: Introducción a la Ingeniería de SoftwareIIS Unidad1: Introducción a la Ingeniería de Software
IIS Unidad1: Introducción a la Ingeniería de SoftwareFranklin Parrales Bravo
 
Unit Testing Using Mockito in Android (1).pdf
Unit Testing Using Mockito in Android (1).pdfUnit Testing Using Mockito in Android (1).pdf
Unit Testing Using Mockito in Android (1).pdfKaty Slemon
 
Unit Testing with Python
Unit Testing with PythonUnit Testing with Python
Unit Testing with PythonMicroPyramid .
 
MOD Unidad 3: Modelado y verificación formal
MOD Unidad 3: Modelado y verificación formalMOD Unidad 3: Modelado y verificación formal
MOD Unidad 3: Modelado y verificación formalFranklin Parrales Bravo
 
IDR Unidad 2: Elicitación de requerimientos
IDR Unidad 2: Elicitación de requerimientosIDR Unidad 2: Elicitación de requerimientos
IDR Unidad 2: Elicitación de requerimientosFranklin Parrales Bravo
 
Testes pythonicos com pytest
Testes pythonicos com pytestTestes pythonicos com pytest
Testes pythonicos com pytestviniciusban
 
Modelos o Ciclos de vida de software
Modelos o Ciclos de vida de softwareModelos o Ciclos de vida de software
Modelos o Ciclos de vida de softwareWilliam Matamoros
 

La actualidad más candente (20)

Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)
 
js-arrays.pptx
js-arrays.pptxjs-arrays.pptx
js-arrays.pptx
 
Preguntas JAVA.docx
Preguntas JAVA.docxPreguntas JAVA.docx
Preguntas JAVA.docx
 
Testing in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkTesting in-python-and-pytest-framework
Testing in-python-and-pytest-framework
 
Casos de pruebas
Casos de pruebasCasos de pruebas
Casos de pruebas
 
Analisis y especificacion de requerimientos
Analisis y especificacion de requerimientosAnalisis y especificacion de requerimientos
Analisis y especificacion de requerimientos
 
IIS Unidad1: Introducción a la Ingeniería de Software
IIS Unidad1: Introducción a la Ingeniería de SoftwareIIS Unidad1: Introducción a la Ingeniería de Software
IIS Unidad1: Introducción a la Ingeniería de Software
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Unit Testing Using Mockito in Android (1).pdf
Unit Testing Using Mockito in Android (1).pdfUnit Testing Using Mockito in Android (1).pdf
Unit Testing Using Mockito in Android (1).pdf
 
Unit Testing with Python
Unit Testing with PythonUnit Testing with Python
Unit Testing with Python
 
TestNG Framework
TestNG Framework TestNG Framework
TestNG Framework
 
Reingeniería
ReingenieríaReingeniería
Reingeniería
 
Testing Tools
Testing ToolsTesting Tools
Testing Tools
 
MOD Unidad 3: Modelado y verificación formal
MOD Unidad 3: Modelado y verificación formalMOD Unidad 3: Modelado y verificación formal
MOD Unidad 3: Modelado y verificación formal
 
Unidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a ObjetosUnidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a Objetos
 
IDR Unidad 2: Elicitación de requerimientos
IDR Unidad 2: Elicitación de requerimientosIDR Unidad 2: Elicitación de requerimientos
IDR Unidad 2: Elicitación de requerimientos
 
4 unidad polimorfismo
4 unidad polimorfismo4 unidad polimorfismo
4 unidad polimorfismo
 
Testes pythonicos com pytest
Testes pythonicos com pytestTestes pythonicos com pytest
Testes pythonicos com pytest
 
Modelos o Ciclos de vida de software
Modelos o Ciclos de vida de softwareModelos o Ciclos de vida de software
Modelos o Ciclos de vida de software
 
Belajar Postman test runner
Belajar Postman test runnerBelajar Postman test runner
Belajar Postman test runner
 

Similar a Test Unitarios Diseño al cubo : Plan TDD Donostia

Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDDFernando Perez
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmockkaolong
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de softwareGomez Gomez
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytestHector Canto
 
Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Juan Vladimir
 
pruebasunitarias-110921232512-phpapp02.pptx
pruebasunitarias-110921232512-phpapp02.pptxpruebasunitarias-110921232512-phpapp02.pptx
pruebasunitarias-110921232512-phpapp02.pptxCompusoftnetCiaLtda
 
Insight Brou 2009 11 Encuentro Usr Rational Gur07
Insight Brou 2009 11   Encuentro Usr Rational Gur07Insight Brou 2009 11   Encuentro Usr Rational Gur07
Insight Brou 2009 11 Encuentro Usr Rational Gur07Irene Pazos Viana
 
Testing & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetsTesting & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetseusonlito
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurancewill2294
 
Pruebas Automatizadas
Pruebas AutomatizadasPruebas Automatizadas
Pruebas AutomatizadasAngel Nuñez
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013dayaorte
 
Pruebas-OCW.pdf
Pruebas-OCW.pdfPruebas-OCW.pdf
Pruebas-OCW.pdflgarcias
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDHernan Wilkinson
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 

Similar a Test Unitarios Diseño al cubo : Plan TDD Donostia (20)

Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDD
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de software
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytest
 
Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Conceptos básicos de Unit Test
Conceptos básicos de Unit Test
 
software testing
software testingsoftware testing
software testing
 
pruebasunitarias-110921232512-phpapp02.pptx
pruebasunitarias-110921232512-phpapp02.pptxpruebasunitarias-110921232512-phpapp02.pptx
pruebasunitarias-110921232512-phpapp02.pptx
 
Insight Brou 2009 11 Encuentro Usr Rational Gur07
Insight Brou 2009 11   Encuentro Usr Rational Gur07Insight Brou 2009 11   Encuentro Usr Rational Gur07
Insight Brou 2009 11 Encuentro Usr Rational Gur07
 
Testing & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetsTesting & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnets
 
Tdd
TddTdd
Tdd
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurance
 
Introducción a TDD
Introducción a TDDIntroducción a TDD
Introducción a TDD
 
Pruebas Automatizadas
Pruebas AutomatizadasPruebas Automatizadas
Pruebas Automatizadas
 
S9-DAW-2022S1.pptx
S9-DAW-2022S1.pptxS9-DAW-2022S1.pptx
S9-DAW-2022S1.pptx
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013
 
Presentación: xUnit y Junit
Presentación: xUnit y JunitPresentación: xUnit y Junit
Presentación: xUnit y Junit
 
Pruebas-OCW.pdf
Pruebas-OCW.pdfPruebas-OCW.pdf
Pruebas-OCW.pdf
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDD
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 

Último

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 

Último (20)

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 

Test Unitarios Diseño al cubo : Plan TDD Donostia

  • 1. Test Unitarios Diseño al cubo : Plan TDD Donostia, 06/05/2011
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14. Formación test unitarios Test unitarios Ejemplo de clase :
  • 15. Formación test unitarios Test unitarios Ejemplo de test:
  • 16. Formación test unitarios Test unitarios Ejemplo de test:
  • 17.
  • 18. Plan TDD Dobles de prueba Un doble de prueba es un objeto que no es el real y que usamos para poder probar una funcionalidad aislándonos del resto de los objetos del sistema ¿Qué son los doble de prueba?
  • 19.
  • 20.
  • 21. Plan TDD Dobles de prueba Un stub es un objeto que programamos para que nos devuelva lo que nos de la gana y poder probar cómo reacciona nuestro código ante los distintos valores de respuesta del colaborador en cuestión Stubs
  • 22. Plan TDD Dobles de prueba Ejemplo de stub (usando mockito) public class CompraTest { Producto unProductoStub = mock (Producto.class); Producto otroProductoStub = mock (Producto.class); PasarelaDePago pasarelaDePagoStub = mock (PasarelaDePago.class); Compra compra = new Compra(pasarelaDePagoStub); @Test public void si_el_cliente_tiene_fondos_para_realizar_la_compra_la_puedo_confirmar() { when (unProductoStub.precio()). thenReturn (50); when (otroProductoStub.precio()). thenReturn (25); when (pasarelaDePagoStub.tieneElUsuarioFondosPorValorDe(75)). thenReturn (true); compra.anadir(unProductoStub); compra.anadir(otroProductoStub); assertTrue(compra.confirmar()); } }
  • 23.
  • 24. Plan TDD Dobles de prueba Mocks Un mock es un doble que nos sirve para verificar salidas indirectas del objeto que estamos probando
  • 25. Plan TDD Dobles de prueba Ejemplo de mock (usando easyMock) public class CompraTestMocks { PasarelaDePago pasarelaDePagoMock = createMock(PasarelaDePago.class); Producto unProductoStub = createMock(Producto.class); Compra compra = new Compra(pasarelaDePagoMock); @Test public void si_el_cliente_tiene_fondos_para_realizar_la_compra_tengo_que_cobrarle_a_traves_de_la_pasarela_de_pago() { expect (unProductoStub.precio()). andReturn (50); expect (pasarelaDePagoMock.tieneElUsuarioFondosPorValorDe(50)). andReturn (true); pasarelaDePagoMock.cobrar(50); replay (pasarelaDePagoMock); replay (unProductoStub); compra.anadir(unProductoStub); compra.confirmar(); verify (pasarelaDePagoMock); } }
  • 26. Plan TDD boolean confirmar() { int elPrecioDeLaCompra = precio(); boolean tieneElUsuarioFondos = pasarelaDePago.tieneElUsuarioFondosPorValorDe(elPrecioDeLaCompra); if (tieneElUsuarioFondos){ pasarelaDePago.cobrar(elPrecioDeLaCompra); } return tieneElUsuarioFondos; } Dobles de prueba
  • 27. Plan TDD Dobles de prueba Spies Al igual que los mocks , los spies sirven para hacer comprobaciones sobre salidas indirectas. La diferencia es que con un Spy lo que hacemos es después de ejecutar el método a probar verificar si sobre el doble se ha invocado a tal o cual método
  • 28. Plan TDD Dobles de prueba Ejemplo de Spy (usando mockito) public class CompraTestSpies { PasarelaDePago pasarelaDePagoSpy = mock (PasarelaDePago.class); Producto unProductoStub = mock (Producto.class); Compra compra = new Compra(pasarelaDePagoSpy); @Test public void si_el_cliente_tiene_fondos_para_realizar_la_compra_tengo_que_cobrarle_a_traves_de_la_pasarela_de_pago() { when (unProductoStub.precio()). thenReturn (50); when (pasarelaDePagoSpy.tieneElUsuarioFondosPorValorDe(50)). thenReturn (false); compra.anadir(unProductoStub); compra.confirmar(); verify (pasarelaDePagoSpy).cobrar(50); } }
  • 29. Plan TDD Dobles de prueba Entonces ¿Mocks o Spies?
  • 30. Plan TDD Dobles de prueba Fakes Un fake es una implementación falsa de un determinado interfaz, más simple normalmente, con el objetivo de hacer que el test se pueda ejecutar más rápido o sin dependencias de un sistema externo. Por ejemplo un fake de un objeto que acceda a la persistencia podría ser una implementación en memoria del mismo objeto.
  • 31. Plan TDD Dobles de prueba Dummy Un dummy es simplemente cuando el objeto a probar tiene algún colaborador que no vamos a utilizar en este test, entonces se le pasa un dummy que puede ser simplemente un nulo
  • 32. Plan TDD Webs de referencia Mock Sucks http://www.testingtv.com/2010/12/20/mocks-suck-and-what-to-do-about-it/ Java Mock Frameworks Comparison http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html Diferencias entre mocks y stubs http://theproc.es/2009/5/21/658/diferencias-entre-mocks-y-stubs Escribiendo mejores tests http://weblogs.javahispano.org/artesanodeprimera/entry/escribiendo_mejores_test_iii_mocking Dobles de prueba
  • 33.
  • 34.
  • 35.
  • 36.
  • 37. Formación test unitarios Test unitarios ¡Nos vemos en 15 días!
  • 38. Ruben Egiluz Software Engineer Ivan Rodriguez Software Engineer Donewtech Solutions, S.L. Zubiberri Bidea 31 Edificio Urumea 20018 Donostia – San Sebastián +34 943 223 031 www.donewtech.com ¡¡Gracias!!