SlideShare una empresa de Scribd logo
1 de 54
UnitTestingwithMockObjects Angel Núñez Salazar @snahider / snahider.blogspot.com
Tipos de Test Es una nomenclatura caótica y no existe una sola categoría. Alcance: Unidades, Componentes, Sistemas Etapa: Integración, aceptación, regresión Enfoque: Performance, funcionales Visibilidad: White / black box El tipo de test se convierte en un atributo.
Sistema 3 Tipos Importantes de Test + Integración Unitarios - Alcance
Test Unitarios
Test Unitarios  Se encargan de verificar asunciones sobre piezas lógicas de código y en aislamiento
Test Unitarios  Código Lógico: Pequeñas unidades de código con lógica(ifs, loops, cálculos, etc)
Test Unitarios  Aislamiento:  Se realizan de manera separada al resto de la aplicación, de sus dependencias y no acceden a recursos del sistema. Un test unitario no se comunica con la base de datos. Un Test Unitario no depende de archivos de configuración. Un Test Unitario no ejercita la clase y todas sus dependencias en simultáneo.
Como se escribe un Test Unitario Creamos todas las precondiciones y entradas necesarias. ARRANGE Realizamos la acción del objeto que estamos probando. ACT ASSERT Verificamos los resultados esperados.
Propiedades de un buen Test Unitario Fast: Unos cuantos milisegundos en ejecutarse. Isolated: Enfocarse en una única unidad de código. Repeatable: Ejecutarse de manera repetitiva sin intervención. Self-validating: Sin necesidad de reexaminar los resultados. Timely: Escritos en el momento adecuado, antes del código.
Test de Integración
Test de Integración Se encargan de realizar pruebas a dos o más módulos dependientes de software.
¿ Cuál es el problema con los test de integración? «Integration Test are a Vortex of Doom» J.B Rainsberger ,[object Object]
Muy frágiles.
Difíciles de configurar y ejecutar de manera atómica.
No nos dan una certeza de cuál ha sido el error.,[object Object]
Pero aún tenemos un problema No  cualquier código puede ser probado de manera unitaria. Si queremos que un código sea testeable, debemos escribirlo pensando en la testeabilidad. La testeabilidad es un atributo de calidad del código que permite que las pruebas automatizadas sean realizadas de manera fácil y efectiva. La testeabilidad por lo general es señal de un buen diseño.
EjemploRealizando Pruebas Unitarias a un código acoplado
Independencia de Contexto Dos objetos son fáciles de intercambiar si estos se ejecutan de manera independiente al contexto, es decir si los objetos no tienen conocimiento interno acerca del sistema en el cuál se ejecutan. Tenemos un amigo:  INVERSION DE DEPENDENCIAS
Inversión de Dependencias Las clases de alto nivel no deben depender directamente de clases de bajo nivel sino de abstracciones de estas clases.
Inversión de Dependencias Inyección de Dependencias + ,[object Object]
Pasar estas abstracciones desde afuera del ámbito de la clase para que sean utilizadas de manera permanente.(Pasar las dependencias a la clase por el constructor),[object Object]
¿ Cuál es el siguiente paso ? Ahora que las clases no dependen de un contexto o implementación específica, debemos hacer que los test sean quienes decidan cual es el contexto a utilizar y se lo pasen a la clase en prueba.
Test Doubles Son todos aquellos objetos que han sido creados para reemplazar a los objetos reales con el propósito de hacer pruebas.
EjemploUtilizando Test Doubles para realizar pruebas unitarias
¿ Cuál es el problema ? BD Other Class Other Class Act Other Class Test ClassUnder Test FileSystem Assert Other Class Other Class
¿Cuál es el problema? Responsabilidades de la clase Creación de jerarquía de objetos Lógica de Negocios
Encontrando la solución Responsabilidades de una clase externa Responsabilidades de la clase Creación de jerarquía de objetos Lógica de Negocios
Encontrando la solución Simple Class Act Simple Class Test ClassUnder Test Assert Simple Class
Mocking / Stubbing Mock Mock Se le denomina al proceso en el cuál el test decide la implementación y comportamiento que tendrá un contexto de dependencia para los propósitos del test.
IsolationMockingFrameworks ,[object Object]
Cuando escribimos Test Doublesmanuales tendemos a repetir el código..NET  : Moq, RhinoMock, Typemock Java  : Mockito, EasyMock, Jmock Ruby: RSpecBuilt-in, Mocha
Tipos de Test Doubles Stubs Mocks Dummies Fakes
Test Doubles: Stubs ,[object Object]
El test tiene el control sobre este test double, por lo que puede indicarle respuestas predefinidas a ciertas llamadas.,[object Object]
Test Doubles: Mocks Nos permite verificar si un objeto ha enviado o recibido un determinado mensaje de otro objeto. (Si un objeto ha interactuado correctamente con otro objeto) StateTesting( ResultDriven).- Verificamos si un resultado final es el que esperamos. InterationTesting( ActionDriven) .- Verificamos si una determinada acción se ha producido.
Test Doubles : Mocks ,[object Object]
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. ,[object Object]
Como los diferenciamos fácilmente Stub: Todo aquel Test Double que permite que el test pueda terminar su ejecución. Mock: El Test Double sobre el cuál se realiza un aserto.
Otros Test Doubles Dummy Objetos que se encuentran instanciados pero nunca se utilizan, usualmente para llenar una lista de parámetros. Fake Similares a un Stub o un Mock con la diferencia que el test no tiene el control sobre estos.
Todos los tipos de test son importantes ,[object Object]
Cada Tipo de test es una nueva capa de protección en nuestro sistema.
El balance  y aplicación efectiva de todos los tipos de test es lo que te dará beneficios.,[object Object]
¿ Como escribimos código que sea difícil de probar ?
«No hay ningún secreto en cómo escribir los tests,solo hay secretos en cómo escribir código testeable.» MiskoHevery
Como podemos mejorar la testeabilidad ,[object Object]
No realizar trabajo en el constructor.
Preferir la composición sobre la herencia.
Evitar métodos y clases estáticas o el patrón singleton.,[object Object]
No realizar trabajo en el constructor ,[object Object]
El operador New en el constructor.
Cualquier tipo de llamada estática.
Cualquier tipo de lógica (condicionales, iteraciones).
Necesidad de llamar a un método «init» luego de la construcción del objeto.

Más contenido relacionado

La actualidad más candente

Introducción a JBoss
Introducción a JBossIntroducción a JBoss
Introducción a JBossIker Canarias
 
CNIT 123: 6: Enumeration
CNIT 123: 6: EnumerationCNIT 123: 6: Enumeration
CNIT 123: 6: EnumerationSam Bowne
 
Embedded Systems: Lecture 11: Introduction to Git & GitHub (Part 2)
Embedded Systems: Lecture 11: Introduction to Git & GitHub (Part 2)Embedded Systems: Lecture 11: Introduction to Git & GitHub (Part 2)
Embedded Systems: Lecture 11: Introduction to Git & GitHub (Part 2)Ahmed El-Arabawy
 
Open source network forensics and advanced pcap analysis
Open source network forensics and advanced pcap analysisOpen source network forensics and advanced pcap analysis
Open source network forensics and advanced pcap analysisGTKlondike
 
EL MODELO OSI Gestion de red
EL MODELO OSI Gestion de redEL MODELO OSI Gestion de red
EL MODELO OSI Gestion de redABELCALIXTOG
 
Introduction to shell scripting
Introduction to shell scriptingIntroduction to shell scripting
Introduction to shell scriptingCorrado Santoro
 
Nagios XI Best Practices
Nagios XI Best PracticesNagios XI Best Practices
Nagios XI Best PracticesNagios
 
Qué es exactamente un sistema cluster
Qué es exactamente un sistema clusterQué es exactamente un sistema cluster
Qué es exactamente un sistema clusterJuan Manuel Torres
 
Microservices Security
Microservices SecurityMicroservices Security
Microservices SecurityAditi Anand
 
Working with WebSPHINX Web Crawler
Working with WebSPHINX Web Crawler Working with WebSPHINX Web Crawler
Working with WebSPHINX Web Crawler Sanchit Saini
 

La actualidad más candente (20)

Introducción a JBoss
Introducción a JBossIntroducción a JBoss
Introducción a JBoss
 
Soa unit-1-well formed and valid document08.07.2019
Soa unit-1-well formed and valid document08.07.2019Soa unit-1-well formed and valid document08.07.2019
Soa unit-1-well formed and valid document08.07.2019
 
CNIT 123: 6: Enumeration
CNIT 123: 6: EnumerationCNIT 123: 6: Enumeration
CNIT 123: 6: Enumeration
 
Embedded Systems: Lecture 11: Introduction to Git & GitHub (Part 2)
Embedded Systems: Lecture 11: Introduction to Git & GitHub (Part 2)Embedded Systems: Lecture 11: Introduction to Git & GitHub (Part 2)
Embedded Systems: Lecture 11: Introduction to Git & GitHub (Part 2)
 
Windows Security Crash Course
Windows Security Crash CourseWindows Security Crash Course
Windows Security Crash Course
 
Firewall presentation
Firewall presentationFirewall presentation
Firewall presentation
 
Open source network forensics and advanced pcap analysis
Open source network forensics and advanced pcap analysisOpen source network forensics and advanced pcap analysis
Open source network forensics and advanced pcap analysis
 
FIREWALLD
FIREWALLDFIREWALLD
FIREWALLD
 
Curso Java Avanzado 2 Servlets
Curso Java Avanzado   2 ServletsCurso Java Avanzado   2 Servlets
Curso Java Avanzado 2 Servlets
 
EL MODELO OSI Gestion de red
EL MODELO OSI Gestion de redEL MODELO OSI Gestion de red
EL MODELO OSI Gestion de red
 
XXE - XML External Entity Attack
XXE - XML External Entity Attack	XXE - XML External Entity Attack
XXE - XML External Entity Attack
 
Linux and firewall
Linux and firewallLinux and firewall
Linux and firewall
 
Snort IPS
Snort IPSSnort IPS
Snort IPS
 
Introduction to shell scripting
Introduction to shell scriptingIntroduction to shell scripting
Introduction to shell scripting
 
Nagios XI Best Practices
Nagios XI Best PracticesNagios XI Best Practices
Nagios XI Best Practices
 
Qué es exactamente un sistema cluster
Qué es exactamente un sistema clusterQué es exactamente un sistema cluster
Qué es exactamente un sistema cluster
 
Microservices Security
Microservices SecurityMicroservices Security
Microservices Security
 
Working with WebSPHINX Web Crawler
Working with WebSPHINX Web Crawler Working with WebSPHINX Web Crawler
Working with WebSPHINX Web Crawler
 
Apuntes de DTD
Apuntes de DTDApuntes de DTD
Apuntes de DTD
 
Nmap Basics
Nmap BasicsNmap Basics
Nmap Basics
 

Destacado (20)

Nutrición y alimentación. parte i
Nutrición y alimentación. parte iNutrición y alimentación. parte i
Nutrición y alimentación. parte i
 
Apps Arredor dos libros
Apps Arredor dos librosApps Arredor dos libros
Apps Arredor dos libros
 
Maryury Marquez Diapositivas con Hipervínculos
Maryury Marquez Diapositivas con HipervínculosMaryury Marquez Diapositivas con Hipervínculos
Maryury Marquez Diapositivas con Hipervínculos
 
Unah día padre2014.docx
Unah día padre2014.docxUnah día padre2014.docx
Unah día padre2014.docx
 
Social Media Marketing
Social Media MarketingSocial Media Marketing
Social Media Marketing
 
Sesión PFPP
Sesión PFPPSesión PFPP
Sesión PFPP
 
Politicas educativas
Politicas educativasPoliticas educativas
Politicas educativas
 
Hacia una educación sostenible
Hacia una educación sostenibleHacia una educación sostenible
Hacia una educación sostenible
 
tungurahua
tungurahuatungurahua
tungurahua
 
Presentacion De Servicios
Presentacion De ServiciosPresentacion De Servicios
Presentacion De Servicios
 
Cendoc fs
Cendoc fsCendoc fs
Cendoc fs
 
Diapositivas De La Historia Y Al Tecnologia[1]
Diapositivas De La Historia Y Al Tecnologia[1]Diapositivas De La Historia Y Al Tecnologia[1]
Diapositivas De La Historia Y Al Tecnologia[1]
 
Guia Gelosia
Guia GelosiaGuia Gelosia
Guia Gelosia
 
Caso 3 infecciones pulmonares
Caso 3 infecciones pulmonaresCaso 3 infecciones pulmonares
Caso 3 infecciones pulmonares
 
Elfracaso
ElfracasoElfracaso
Elfracaso
 
Emprendimiento
EmprendimientoEmprendimiento
Emprendimiento
 
Ch05 e
Ch05 eCh05 e
Ch05 e
 
Tecnologia educativa
Tecnologia educativaTecnologia educativa
Tecnologia educativa
 
Los coches del Jesus
Los coches del JesusLos coches del Jesus
Los coches del Jesus
 
Veteranos
VeteranosVeteranos
Veteranos
 

Similar a Unit Testing with Mock Objects

Similar a Unit Testing with Mock Objects (20)

Pruebas Automatizadas
Pruebas AutomatizadasPruebas Automatizadas
Pruebas Automatizadas
 
Prueba software orientado a objetos
Prueba software orientado a objetosPrueba software orientado a objetos
Prueba software orientado a objetos
 
Calidad del software cap3
Calidad del software   cap3Calidad del software   cap3
Calidad del software cap3
 
S5-CDSQA.pptx
S5-CDSQA.pptxS5-CDSQA.pptx
S5-CDSQA.pptx
 
Test Automation .NET
Test Automation .NETTest Automation .NET
Test Automation .NET
 
Prueba unitaria
Prueba unitariaPrueba unitaria
Prueba unitaria
 
Aw agiles2010 - dppt 1.1
Aw agiles2010 - dppt 1.1Aw agiles2010 - dppt 1.1
Aw agiles2010 - dppt 1.1
 
Pruebas unitarias
Pruebas unitariasPruebas unitarias
Pruebas unitarias
 
Ingenieria de sw Junit
Ingenieria de sw JunitIngenieria de sw Junit
Ingenieria de sw Junit
 
Introducción a test unitarios y test de integración.pdf
Introducción a test unitarios y test de integración.pdfIntroducción a test unitarios y test de integración.pdf
Introducción a test unitarios y test de integración.pdf
 
software testing
software testingsoftware testing
software testing
 
Pruebas unitarias 7mo -b
Pruebas unitarias   7mo -bPruebas unitarias   7mo -b
Pruebas unitarias 7mo -b
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de software
 
Presentación: xUnit y Junit
Presentación: xUnit y JunitPresentación: xUnit y Junit
Presentación: xUnit y Junit
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
 
Seminario de Test Development Driven
Seminario de Test Development DrivenSeminario de Test Development Driven
Seminario de Test Development Driven
 
Testeo unitario
Testeo unitarioTesteo unitario
Testeo unitario
 
The art of unit testing
The art of unit testingThe art of unit testing
The art of unit testing
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
 
Introduction to unit testing
Introduction to unit testingIntroduction to unit testing
Introduction to unit testing
 

Más de Angel Nuñez

Structural Agility
Structural AgilityStructural Agility
Structural AgilityAngel Nuñez
 
Architecting Sociotechnical Systems
Architecting Sociotechnical SystemsArchitecting Sociotechnical Systems
Architecting Sociotechnical SystemsAngel Nuñez
 
Product Development Flow
Product Development FlowProduct Development Flow
Product Development FlowAngel Nuñez
 
Hackeando la Cultura Organizacional
Hackeando la Cultura OrganizacionalHackeando la Cultura Organizacional
Hackeando la Cultura OrganizacionalAngel Nuñez
 
Liderazgo Transformacional
Liderazgo TransformacionalLiderazgo Transformacional
Liderazgo TransformacionalAngel Nuñez
 
Liderazgo Transformacional y DevOps
Liderazgo Transformacional y DevOpsLiderazgo Transformacional y DevOps
Liderazgo Transformacional y DevOpsAngel Nuñez
 
Exploratory Testing
Exploratory TestingExploratory Testing
Exploratory TestingAngel Nuñez
 
Kubernetes - Container Orchestration, Deployment and Scaling
Kubernetes - Container Orchestration, Deployment and ScalingKubernetes - Container Orchestration, Deployment and Scaling
Kubernetes - Container Orchestration, Deployment and ScalingAngel Nuñez
 
Agile Test Strategy
Agile Test StrategyAgile Test Strategy
Agile Test StrategyAngel Nuñez
 
Kubernetes - #gdglimasummit
Kubernetes - #gdglimasummitKubernetes - #gdglimasummit
Kubernetes - #gdglimasummitAngel Nuñez
 
Agile Testing - Software Testing Club
Agile Testing - Software Testing ClubAgile Testing - Software Testing Club
Agile Testing - Software Testing ClubAngel Nuñez
 
Kubernetes - #dockerconlima
Kubernetes  - #dockerconlimaKubernetes  - #dockerconlima
Kubernetes - #dockerconlimaAngel Nuñez
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as CodeAngel Nuñez
 
Test Driven Infrastructure
Test Driven InfrastructureTest Driven Infrastructure
Test Driven InfrastructureAngel Nuñez
 
Software Debt: Qué Es y Cómo Gestionarlo Holísticamente
Software Debt: Qué Es y Cómo Gestionarlo HolísticamenteSoftware Debt: Qué Es y Cómo Gestionarlo Holísticamente
Software Debt: Qué Es y Cómo Gestionarlo HolísticamenteAngel Nuñez
 
Refactoring to Patterns
Refactoring to PatternsRefactoring to Patterns
Refactoring to PatternsAngel Nuñez
 

Más de Angel Nuñez (20)

Structural Agility
Structural AgilityStructural Agility
Structural Agility
 
Architecting Sociotechnical Systems
Architecting Sociotechnical SystemsArchitecting Sociotechnical Systems
Architecting Sociotechnical Systems
 
Product Development Flow
Product Development FlowProduct Development Flow
Product Development Flow
 
Chaos Engineering
Chaos EngineeringChaos Engineering
Chaos Engineering
 
Hackeando la Cultura Organizacional
Hackeando la Cultura OrganizacionalHackeando la Cultura Organizacional
Hackeando la Cultura Organizacional
 
Liderazgo Transformacional
Liderazgo TransformacionalLiderazgo Transformacional
Liderazgo Transformacional
 
Liderazgo Transformacional y DevOps
Liderazgo Transformacional y DevOpsLiderazgo Transformacional y DevOps
Liderazgo Transformacional y DevOps
 
Exploratory Testing
Exploratory TestingExploratory Testing
Exploratory Testing
 
Coding Dojo
Coding DojoCoding Dojo
Coding Dojo
 
Kubernetes - Container Orchestration, Deployment and Scaling
Kubernetes - Container Orchestration, Deployment and ScalingKubernetes - Container Orchestration, Deployment and Scaling
Kubernetes - Container Orchestration, Deployment and Scaling
 
Agile Test Strategy
Agile Test StrategyAgile Test Strategy
Agile Test Strategy
 
Kubernetes - #gdglimasummit
Kubernetes - #gdglimasummitKubernetes - #gdglimasummit
Kubernetes - #gdglimasummit
 
Agile Testing - Software Testing Club
Agile Testing - Software Testing ClubAgile Testing - Software Testing Club
Agile Testing - Software Testing Club
 
Kubernetes - #dockerconlima
Kubernetes  - #dockerconlimaKubernetes  - #dockerconlima
Kubernetes - #dockerconlima
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as Code
 
Test Driven Infrastructure
Test Driven InfrastructureTest Driven Infrastructure
Test Driven Infrastructure
 
Software Debt: Qué Es y Cómo Gestionarlo Holísticamente
Software Debt: Qué Es y Cómo Gestionarlo HolísticamenteSoftware Debt: Qué Es y Cómo Gestionarlo Holísticamente
Software Debt: Qué Es y Cómo Gestionarlo Holísticamente
 
Unit testing
Unit testingUnit testing
Unit testing
 
Refactoring
RefactoringRefactoring
Refactoring
 
Refactoring to Patterns
Refactoring to PatternsRefactoring to Patterns
Refactoring to Patterns
 

Último

editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docxssusere34b451
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .itzyrivera61103
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).jcaballerosamayoa
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024NicolleAndrade7
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxJOELGARCIA849853
 
De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxdoloresolmosantiago
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónUniversidad de Sonora
 
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptxNIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptxjarniel1
 
innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blogManuel Diaz
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxCsarNlsonMrquezContr
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.241534381
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosYOMIRAVILLARREAL1
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaRicardoEstrada90
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...dramosbrise1403
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónAntonia Yamilet Perez Palomares
 
Inteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialInteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialEducática
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaEdwinGarca59
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALGuadalinfoHuscarGuad
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC6dwwcgtpfx
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx221112876
 

Último (20)

editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
 
De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptx
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la información
 
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptxNIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
 
innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blog
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docx
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de Datos
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - Estrada
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
 
Inteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialInteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicial
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación Latinoamerica
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx
 

Unit Testing with Mock Objects

  • 1. UnitTestingwithMockObjects Angel Núñez Salazar @snahider / snahider.blogspot.com
  • 2. Tipos de Test Es una nomenclatura caótica y no existe una sola categoría. Alcance: Unidades, Componentes, Sistemas Etapa: Integración, aceptación, regresión Enfoque: Performance, funcionales Visibilidad: White / black box El tipo de test se convierte en un atributo.
  • 3. Sistema 3 Tipos Importantes de Test + Integración Unitarios - Alcance
  • 5. Test Unitarios Se encargan de verificar asunciones sobre piezas lógicas de código y en aislamiento
  • 6. Test Unitarios Código Lógico: Pequeñas unidades de código con lógica(ifs, loops, cálculos, etc)
  • 7. Test Unitarios Aislamiento: Se realizan de manera separada al resto de la aplicación, de sus dependencias y no acceden a recursos del sistema. Un test unitario no se comunica con la base de datos. Un Test Unitario no depende de archivos de configuración. Un Test Unitario no ejercita la clase y todas sus dependencias en simultáneo.
  • 8. Como se escribe un Test Unitario Creamos todas las precondiciones y entradas necesarias. ARRANGE Realizamos la acción del objeto que estamos probando. ACT ASSERT Verificamos los resultados esperados.
  • 9. Propiedades de un buen Test Unitario Fast: Unos cuantos milisegundos en ejecutarse. Isolated: Enfocarse en una única unidad de código. Repeatable: Ejecutarse de manera repetitiva sin intervención. Self-validating: Sin necesidad de reexaminar los resultados. Timely: Escritos en el momento adecuado, antes del código.
  • 11. Test de Integración Se encargan de realizar pruebas a dos o más módulos dependientes de software.
  • 12.
  • 14. Difíciles de configurar y ejecutar de manera atómica.
  • 15.
  • 16. Pero aún tenemos un problema No cualquier código puede ser probado de manera unitaria. Si queremos que un código sea testeable, debemos escribirlo pensando en la testeabilidad. La testeabilidad es un atributo de calidad del código que permite que las pruebas automatizadas sean realizadas de manera fácil y efectiva. La testeabilidad por lo general es señal de un buen diseño.
  • 17. EjemploRealizando Pruebas Unitarias a un código acoplado
  • 18. Independencia de Contexto Dos objetos son fáciles de intercambiar si estos se ejecutan de manera independiente al contexto, es decir si los objetos no tienen conocimiento interno acerca del sistema en el cuál se ejecutan. Tenemos un amigo: INVERSION DE DEPENDENCIAS
  • 19. Inversión de Dependencias Las clases de alto nivel no deben depender directamente de clases de bajo nivel sino de abstracciones de estas clases.
  • 20.
  • 21.
  • 22. ¿ Cuál es el siguiente paso ? Ahora que las clases no dependen de un contexto o implementación específica, debemos hacer que los test sean quienes decidan cual es el contexto a utilizar y se lo pasen a la clase en prueba.
  • 23. Test Doubles Son todos aquellos objetos que han sido creados para reemplazar a los objetos reales con el propósito de hacer pruebas.
  • 24. EjemploUtilizando Test Doubles para realizar pruebas unitarias
  • 25. ¿ Cuál es el problema ? BD Other Class Other Class Act Other Class Test ClassUnder Test FileSystem Assert Other Class Other Class
  • 26. ¿Cuál es el problema? Responsabilidades de la clase Creación de jerarquía de objetos Lógica de Negocios
  • 27. Encontrando la solución Responsabilidades de una clase externa Responsabilidades de la clase Creación de jerarquía de objetos Lógica de Negocios
  • 28. Encontrando la solución Simple Class Act Simple Class Test ClassUnder Test Assert Simple Class
  • 29. Mocking / Stubbing Mock Mock Se le denomina al proceso en el cuál el test decide la implementación y comportamiento que tendrá un contexto de dependencia para los propósitos del test.
  • 30.
  • 31. Cuando escribimos Test Doublesmanuales tendemos a repetir el código..NET : Moq, RhinoMock, Typemock Java : Mockito, EasyMock, Jmock Ruby: RSpecBuilt-in, Mocha
  • 32. Tipos de Test Doubles Stubs Mocks Dummies Fakes
  • 33.
  • 34.
  • 35. Test Doubles: Mocks Nos permite verificar si un objeto ha enviado o recibido un determinado mensaje de otro objeto. (Si un objeto ha interactuado correctamente con otro objeto) StateTesting( ResultDriven).- Verificamos si un resultado final es el que esperamos. InterationTesting( ActionDriven) .- Verificamos si una determinada acción se ha producido.
  • 36.
  • 37. El Assert ya no se ejecuta sobre la clase en prueba sino sobre el mock.
  • 38.
  • 39. Como los diferenciamos fácilmente Stub: Todo aquel Test Double que permite que el test pueda terminar su ejecución. Mock: El Test Double sobre el cuál se realiza un aserto.
  • 40. Otros Test Doubles Dummy Objetos que se encuentran instanciados pero nunca se utilizan, usualmente para llenar una lista de parámetros. Fake Similares a un Stub o un Mock con la diferencia que el test no tiene el control sobre estos.
  • 41.
  • 42. Cada Tipo de test es una nueva capa de protección en nuestro sistema.
  • 43.
  • 44. ¿ Como escribimos código que sea difícil de probar ?
  • 45. «No hay ningún secreto en cómo escribir los tests,solo hay secretos en cómo escribir código testeable.» MiskoHevery
  • 46.
  • 47. No realizar trabajo en el constructor.
  • 48. Preferir la composición sobre la herencia.
  • 49.
  • 50.
  • 51. El operador New en el constructor.
  • 52. Cualquier tipo de llamada estática.
  • 53. Cualquier tipo de lógica (condicionales, iteraciones).
  • 54. Necesidad de llamar a un método «init» luego de la construcción del objeto.
  • 55. Tener un constructor para pruebas y otros para producción.
  • 56.
  • 57.
  • 58. Si no estamos sobrescribiendo, probablemente estemos abusando de la herencia.
  • 59.
  • 60. ¿ Cuál es el verdadero punto sobre todo esto? En el fondo todo esto no se trata solo sobre testing, sino sobre diseño. ¿Que pasaría si nosotros escribiéramos primero la prueba y luego el código que haga pasar esa prueba? Estaríamos obligando al código a que sea testeable (bien diseñado) – Test DrivenDevelopment
  • 62. ¿ Como funciona todo esto en producción ?
  • 63. Inversion of Control “Is an abstract principle describing an aspect of some software architecture designs in which the flow of control of a system is inverted in comparison to traditional architecture of software”
  • 64. Tipos de IOC DependecyInyection: La idea es tener un objeto en el “mundo exterior” que se encargue de proveer o inyectar la implementación adecuada. Service Locator: La idea es tener una entidad “dentro de la clase” que conozca cómo obtener la implementación adecuada que esta clase podría necesitar.
  • 65. IOC Containers Herramientas que nos permiten obtener la implementación concreta, de un objeto en tiempo de ejecución. .Net: Windsor, StructureMap Java: Spring, PicoContainer