SlideShare una empresa de Scribd logo
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

Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoF
Yaskelly Yedra
 
Unit Testing (C#)
Unit Testing (C#)Unit Testing (C#)
Unit Testing (C#)
Prashant Cholachagudd
 
Test NG Framework Complete Walk Through
Test NG Framework Complete Walk ThroughTest NG Framework Complete Walk Through
Test NG Framework Complete Walk Through
Narendran Solai Sridharan
 
Ns3 implementation wifi
Ns3 implementation wifiNs3 implementation wifi
Ns3 implementation wifi
Salah Amean
 
Patron observador
Patron observadorPatron observador
Unidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a ObjetosUnidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a Objetos
Cindy Adriana Bohórquez Santana
 
What is objectives of software testing
What is objectives of software testingWhat is objectives of software testing
What is objectives of software testing
Software Testing Books
 
Capas del modelo osi
Capas del modelo osiCapas del modelo osi
Capas del modelo osiynato
 
Integration test
Integration testIntegration test
Integration test
sadegh salehi
 
BDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User StoriesBDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User Stories
Sauce Labs
 
Curso Java Inicial 1 POO
Curso Java Inicial   1 POOCurso Java Inicial   1 POO
Curso Java Inicial 1 POO
Emilio Aviles Avila
 
Android Components
Android ComponentsAndroid Components
Android Components
Aatul Palandurkar
 
Solid principles
Solid principlesSolid principles
Solid principles
Kumaresh Chandra Baruri
 
Factores de Calidad
Factores de CalidadFactores de Calidad
Factores de Calidad
Yomaira Londoño
 
Ruby programming
Ruby programmingRuby programming
Ruby programming
Kartik Kalpande Patil
 
2. Cascada De Fase Solapada
2. Cascada De Fase Solapada2. Cascada De Fase Solapada
2. Cascada De Fase Solapada
Jofrahona Rojinegro
 
Java Multithreading and Concurrency
Java Multithreading and ConcurrencyJava Multithreading and Concurrency
Java Multithreading and Concurrency
Rajesh Ananda Kumar
 
Comparación entre cmmi y moprosoft
Comparación entre cmmi y moprosoftComparación entre cmmi y moprosoft
Comparación entre cmmi y moprosoft
Mali Ma
 
OO Development 3 - Models And UML
OO Development 3 - Models And UMLOO Development 3 - Models And UML
OO Development 3 - Models And UML
Randy Connolly
 

La actualidad más candente (20)

Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoF
 
Unit Testing (C#)
Unit Testing (C#)Unit Testing (C#)
Unit Testing (C#)
 
Test NG Framework Complete Walk Through
Test NG Framework Complete Walk ThroughTest NG Framework Complete Walk Through
Test NG Framework Complete Walk Through
 
Ns3 implementation wifi
Ns3 implementation wifiNs3 implementation wifi
Ns3 implementation wifi
 
Patron observador
Patron observadorPatron observador
Patron observador
 
Unidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a ObjetosUnidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a Objetos
 
What is objectives of software testing
What is objectives of software testingWhat is objectives of software testing
What is objectives of software testing
 
Capas del modelo osi
Capas del modelo osiCapas del modelo osi
Capas del modelo osi
 
Integration test
Integration testIntegration test
Integration test
 
xUnit
xUnitxUnit
xUnit
 
BDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User StoriesBDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User Stories
 
Curso Java Inicial 1 POO
Curso Java Inicial   1 POOCurso Java Inicial   1 POO
Curso Java Inicial 1 POO
 
Android Components
Android ComponentsAndroid Components
Android Components
 
Solid principles
Solid principlesSolid principles
Solid principles
 
Factores de Calidad
Factores de CalidadFactores de Calidad
Factores de Calidad
 
Ruby programming
Ruby programmingRuby programming
Ruby programming
 
2. Cascada De Fase Solapada
2. Cascada De Fase Solapada2. Cascada De Fase Solapada
2. Cascada De Fase Solapada
 
Java Multithreading and Concurrency
Java Multithreading and ConcurrencyJava Multithreading and Concurrency
Java Multithreading and Concurrency
 
Comparación entre cmmi y moprosoft
Comparación entre cmmi y moprosoftComparación entre cmmi y moprosoft
Comparación entre cmmi y moprosoft
 
OO Development 3 - Models And UML
OO Development 3 - Models And UMLOO Development 3 - Models And UML
OO Development 3 - Models And UML
 

Destacado

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 iclopezh2009
 
Apps Arredor dos libros
Apps Arredor dos librosApps Arredor dos libros
Apps Arredor dos libros
Mestra Primaria
 
Maryury Marquez Diapositivas con Hipervínculos
Maryury Marquez Diapositivas con HipervínculosMaryury Marquez Diapositivas con Hipervínculos
Maryury Marquez Diapositivas con HipervínculosKattylopez
 
Social Media Marketing
Social Media MarketingSocial Media Marketing
Social Media Marketing
wpalencia
 
Sesión PFPP
Sesión PFPPSesión PFPP
Sesión PFPP
Mestra Primaria
 
Hacia una educación sostenible
Hacia una educación sostenibleHacia una educación sostenible
Hacia una educación sostenible
Universidad Andina Simón Bolívar
 
tungurahua
tungurahuatungurahua
tungurahua
priscila calle
 
Presentacion De Servicios
Presentacion De ServiciosPresentacion De Servicios
Presentacion De Servicios
wpalencia
 
Cendoc fs
Cendoc fsCendoc fs
Cendoc fs
adriforo
 
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]rodrigo
 
Emprendimiento
EmprendimientoEmprendimiento
Emprendimiento
ceboga
 
Tecnologia educativa
Tecnologia educativaTecnologia educativa
Tecnologia educativa
SEEG
 
Los coches del Jesus
Los coches del JesusLos coches del Jesus
Los coches del Jesus2Dbiada
 

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

Pruebas Automatizadas
Pruebas AutomatizadasPruebas Automatizadas
Pruebas Automatizadas
Angel Nuñez
 
Prueba software orientado a objetos
Prueba software orientado a objetosPrueba software orientado a objetos
Prueba software orientado a objetos
Irene Quiñones Osorio
 
S5-CDSQA.pptx
S5-CDSQA.pptxS5-CDSQA.pptx
Test Automation .NET
Test Automation .NETTest Automation .NET
Test Automation .NET
Angel Nuñez
 
Prueba unitaria
Prueba unitariaPrueba unitaria
Prueba unitaria
JefferRosendo
 
Aw agiles2010 - dppt 1.1
Aw agiles2010 - dppt 1.1Aw agiles2010 - dppt 1.1
Aw agiles2010 - dppt 1.1
Juan Carlos Vergara
 
Pruebas unitarias
Pruebas unitariasPruebas unitarias
Pruebas unitarias
Jose Luis Rodriguez Roldan
 
Ingenieria de sw Junit
Ingenieria de sw JunitIngenieria de sw Junit
Ingenieria de sw Junit
pattyand89
 
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
GuillermoGardella1
 
software testing
software testingsoftware testing
software testing
Andrés Grosso
 
Pruebas unitarias 7mo -b
Pruebas unitarias   7mo -bPruebas unitarias   7mo -b
Pruebas unitarias 7mo -b
JairoSimbaa
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de software
Gomez Gomez
 
Presentación: xUnit y Junit
Presentación: xUnit y JunitPresentación: xUnit y Junit
Presentación: xUnit y Junit
Juan Belón Pérez
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
Donewtech Solutions
 
Seminario de Test Development Driven
Seminario de Test Development DrivenSeminario de Test Development Driven
Seminario de Test Development Driven
Paradigma Digital
 
Testeo unitario
Testeo unitarioTesteo unitario
Testeo unitario
Atahualpa Acosta
 
The art of unit testing
The art of unit testingThe art of unit testing
The art of unit testing
Rafael Avaria
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmockkaolong
 
Introduction to unit testing
Introduction to unit testingIntroduction to unit testing
Introduction to unit testing
Federico Damián Lozada Mosto
 

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 Agility
Angel Nuñez
 
Architecting Sociotechnical Systems
Architecting Sociotechnical SystemsArchitecting Sociotechnical Systems
Architecting Sociotechnical Systems
Angel Nuñez
 
Product Development Flow
Product Development FlowProduct Development Flow
Product Development Flow
Angel Nuñez
 
Chaos Engineering
Chaos EngineeringChaos Engineering
Chaos Engineering
Angel Nuñez
 
Hackeando la Cultura Organizacional
Hackeando la Cultura OrganizacionalHackeando la Cultura Organizacional
Hackeando la Cultura Organizacional
Angel Nuñez
 
Liderazgo Transformacional
Liderazgo TransformacionalLiderazgo Transformacional
Liderazgo Transformacional
Angel Nuñez
 
Liderazgo Transformacional y DevOps
Liderazgo Transformacional y DevOpsLiderazgo Transformacional y DevOps
Liderazgo Transformacional y DevOps
Angel Nuñez
 
Exploratory Testing
Exploratory TestingExploratory Testing
Exploratory Testing
Angel Nuñez
 
Coding Dojo
Coding DojoCoding Dojo
Coding Dojo
Angel Nuñez
 
Kubernetes - Container Orchestration, Deployment and Scaling
Kubernetes - Container Orchestration, Deployment and ScalingKubernetes - Container Orchestration, Deployment and Scaling
Kubernetes - Container Orchestration, Deployment and Scaling
Angel Nuñez
 
Agile Test Strategy
Agile Test StrategyAgile Test Strategy
Agile Test Strategy
Angel Nuñez
 
Kubernetes - #gdglimasummit
Kubernetes - #gdglimasummitKubernetes - #gdglimasummit
Kubernetes - #gdglimasummit
Angel Nuñez
 
Agile Testing - Software Testing Club
Agile Testing - Software Testing ClubAgile Testing - Software Testing Club
Agile Testing - Software Testing Club
Angel Nuñez
 
Kubernetes - #dockerconlima
Kubernetes  - #dockerconlimaKubernetes  - #dockerconlima
Kubernetes - #dockerconlima
Angel Nuñez
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as Code
Angel Nuñez
 
Test Driven Infrastructure
Test Driven InfrastructureTest Driven Infrastructure
Test Driven Infrastructure
Angel 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ísticamente
Angel Nuñez
 
Refactoring
RefactoringRefactoring
Refactoring
Angel Nuñez
 
Refactoring to Patterns
Refactoring to PatternsRefactoring to Patterns
Refactoring to Patterns
Angel 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

Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
cj3806354
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Alan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentaciónAlan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentación
JuanPrez962115
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
cdraco
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
ManuelCampos464987
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
Emilio Casbas
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
JulyMuoz18
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
rafaelsalazar0615
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx
44652726
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
jjfch3110
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
Luis Enrique Zafra Haro
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
DanielErazoMedina
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 

Último (20)

Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Alan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentaciónAlan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentación
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 

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