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

Sql Server Performance Tuning
Sql Server Performance TuningSql Server Performance Tuning
Sql Server Performance TuningBala Subra
 
Performance Tuning And Optimization Microsoft SQL Database
Performance Tuning And Optimization Microsoft SQL DatabasePerformance Tuning And Optimization Microsoft SQL Database
Performance Tuning And Optimization Microsoft SQL DatabaseTung Nguyen Thanh
 
Argentesting 2018 - Patrones de diseño en la automatización: ¿PageObject o Sc...
Argentesting 2018 - Patrones de diseño en la automatización: ¿PageObject o Sc...Argentesting 2018 - Patrones de diseño en la automatización: ¿PageObject o Sc...
Argentesting 2018 - Patrones de diseño en la automatización: ¿PageObject o Sc...Argentesting
 
Onion Architecture and the Blog
Onion Architecture and the BlogOnion Architecture and the Blog
Onion Architecture and the Blogbarryosull
 
Interview questions
Interview questionsInterview questions
Interview questionsxavier john
 
Aspect-Oriented Software Development with Use Cases
Aspect-Oriented Software Development with Use CasesAspect-Oriented Software Development with Use Cases
Aspect-Oriented Software Development with Use Caseswww.myassignmenthelp.net
 
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐Terry Cho
 
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사Open Source Consulting
 
Microsoft SQL Server Database Administration.pptx
Microsoft SQL Server Database Administration.pptxMicrosoft SQL Server Database Administration.pptx
Microsoft SQL Server Database Administration.pptxsamtakke1
 
RESTful services on IBM Domino/XWork
RESTful services on IBM Domino/XWorkRESTful services on IBM Domino/XWork
RESTful services on IBM Domino/XWorkJohn Dalsgaard
 
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴Terry Cho
 
Présentation Oracle DataBase 11g
Présentation Oracle DataBase 11gPrésentation Oracle DataBase 11g
Présentation Oracle DataBase 11gCynapsys It Hotspot
 
N-tier Application Developement
N-tier Application DevelopementN-tier Application Developement
N-tier Application DevelopementDetectivee Mirza
 
Core Web Vitals - Técnicas de Performance Web pra Javascript
Core Web Vitals - Técnicas de Performance Web pra Javascript Core Web Vitals - Técnicas de Performance Web pra Javascript
Core Web Vitals - Técnicas de Performance Web pra Javascript CamiloMicheletto1
 

La actualidad más candente (20)

Clear case
Clear caseClear case
Clear case
 
Alfresco in an hour
Alfresco in an hourAlfresco in an hour
Alfresco in an hour
 
Sql Server Performance Tuning
Sql Server Performance TuningSql Server Performance Tuning
Sql Server Performance Tuning
 
Performance Tuning And Optimization Microsoft SQL Database
Performance Tuning And Optimization Microsoft SQL DatabasePerformance Tuning And Optimization Microsoft SQL Database
Performance Tuning And Optimization Microsoft SQL Database
 
Argentesting 2018 - Patrones de diseño en la automatización: ¿PageObject o Sc...
Argentesting 2018 - Patrones de diseño en la automatización: ¿PageObject o Sc...Argentesting 2018 - Patrones de diseño en la automatización: ¿PageObject o Sc...
Argentesting 2018 - Patrones de diseño en la automatización: ¿PageObject o Sc...
 
Performance tuning in sql server
Performance tuning in sql serverPerformance tuning in sql server
Performance tuning in sql server
 
Onion Architecture and the Blog
Onion Architecture and the BlogOnion Architecture and the Blog
Onion Architecture and the Blog
 
Interview questions
Interview questionsInterview questions
Interview questions
 
Aspect-Oriented Software Development with Use Cases
Aspect-Oriented Software Development with Use CasesAspect-Oriented Software Development with Use Cases
Aspect-Oriented Software Development with Use Cases
 
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐
 
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
 
Oracle 12c Architecture
Oracle 12c ArchitectureOracle 12c Architecture
Oracle 12c Architecture
 
Microsoft SQL Server Database Administration.pptx
Microsoft SQL Server Database Administration.pptxMicrosoft SQL Server Database Administration.pptx
Microsoft SQL Server Database Administration.pptx
 
RESTful services on IBM Domino/XWork
RESTful services on IBM Domino/XWorkRESTful services on IBM Domino/XWork
RESTful services on IBM Domino/XWork
 
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativo
 
Présentation Oracle DataBase 11g
Présentation Oracle DataBase 11gPrésentation Oracle DataBase 11g
Présentation Oracle DataBase 11g
 
N-tier Application Developement
N-tier Application DevelopementN-tier Application Developement
N-tier Application Developement
 
steeleye Replication
steeleye Replication steeleye Replication
steeleye Replication
 
Core Web Vitals - Técnicas de Performance Web pra Javascript
Core Web Vitals - Técnicas de Performance Web pra Javascript Core Web Vitals - Técnicas de Performance Web pra Javascript
Core Web Vitals - Técnicas de Performance Web pra Javascript
 

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

investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
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 eyvanamcerpam
 
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.pptxAlan779941
 
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...JohnRamos830530
 
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 estossgonzalezp1
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
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.FlorenciaCattelani
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 

Último (11)

investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
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
 
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
 
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...
 
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
 
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.
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 

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