SlideShare uma empresa 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.

Mais conteúdo relacionado

Mais procurados

2 1 vistas arquitectonicas
2 1 vistas arquitectonicas2 1 vistas arquitectonicas
2 1 vistas arquitectonicaslandeta_p
 
C4model - Arquitectura de Software
C4model - Arquitectura de SoftwareC4model - Arquitectura de Software
C4model - Arquitectura de SoftwareRene Guaman-Quinche
 
UML Básico - Casos de uso y Clases
UML Básico - Casos de uso y ClasesUML Básico - Casos de uso y Clases
UML Básico - Casos de uso y ClasesAntonio Moreno
 
Principios de diseño de la arquitectura del software
Principios de diseño de la arquitectura del softwarePrincipios de diseño de la arquitectura del software
Principios de diseño de la arquitectura del softwareJose Patricio Bovet Derpich
 
Modelo espiral win win
Modelo espiral win winModelo espiral win win
Modelo espiral win winkhinkhe
 
Object-Oriented Analysis And Design With Applications Grady Booch
Object-Oriented Analysis And Design With Applications Grady BoochObject-Oriented Analysis And Design With Applications Grady Booch
Object-Oriented Analysis And Design With Applications Grady BoochSorina Chirilă
 
Patrones comportamiento
Patrones comportamientoPatrones comportamiento
Patrones comportamientoJuan Camilo
 
Metodologías Para AnáLisis Y DiseñO Orientado A Objetos
Metodologías Para AnáLisis Y DiseñO Orientado A ObjetosMetodologías Para AnáLisis Y DiseñO Orientado A Objetos
Metodologías Para AnáLisis Y DiseñO Orientado A Objetoshector_h30
 
UML Architecture and Views
UML Architecture and ViewsUML Architecture and Views
UML Architecture and ViewsKumar
 
Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Jose R. Hilera
 
Sistemas operativos-tarea-semana-5
Sistemas operativos-tarea-semana-5Sistemas operativos-tarea-semana-5
Sistemas operativos-tarea-semana-5Paula Catariny
 
Base de datos: Algebra relacional
Base de datos: Algebra relacionalBase de datos: Algebra relacional
Base de datos: Algebra relacionalkamui002
 
Metodologias modernas para el desarrollo de software
Metodologias modernas para el desarrollo de softwareMetodologias modernas para el desarrollo de software
Metodologias modernas para el desarrollo de softwareDeisy Sapaico
 
07 software connectors
07 software connectors07 software connectors
07 software connectorsMajong DevJfu
 
Tipos de proyectos informáticos, actuales y emergentes
Tipos de proyectos informáticos, actuales y emergentesTipos de proyectos informáticos, actuales y emergentes
Tipos de proyectos informáticos, actuales y emergentesJuan Anaya
 
Ejemplo de ingeniería de software V 2.0
Ejemplo de ingeniería de software V 2.0Ejemplo de ingeniería de software V 2.0
Ejemplo de ingeniería de software V 2.0Victor Escamilla
 

Mais procurados (20)

2 1 vistas arquitectonicas
2 1 vistas arquitectonicas2 1 vistas arquitectonicas
2 1 vistas arquitectonicas
 
Conceptos poo (presentación1)
Conceptos poo (presentación1)Conceptos poo (presentación1)
Conceptos poo (presentación1)
 
C4model - Arquitectura de Software
C4model - Arquitectura de SoftwareC4model - Arquitectura de Software
C4model - Arquitectura de Software
 
UML Básico - Casos de uso y Clases
UML Básico - Casos de uso y ClasesUML Básico - Casos de uso y Clases
UML Básico - Casos de uso y Clases
 
Principios de diseño de la arquitectura del software
Principios de diseño de la arquitectura del softwarePrincipios de diseño de la arquitectura del software
Principios de diseño de la arquitectura del software
 
Arquitectura de Software
Arquitectura de SoftwareArquitectura de Software
Arquitectura de Software
 
Modelo espiral win win
Modelo espiral win winModelo espiral win win
Modelo espiral win win
 
Tema 1. Active Directory
Tema 1. Active DirectoryTema 1. Active Directory
Tema 1. Active Directory
 
Object-Oriented Analysis And Design With Applications Grady Booch
Object-Oriented Analysis And Design With Applications Grady BoochObject-Oriented Analysis And Design With Applications Grady Booch
Object-Oriented Analysis And Design With Applications Grady Booch
 
Patrones comportamiento
Patrones comportamientoPatrones comportamiento
Patrones comportamiento
 
Metodologías Para AnáLisis Y DiseñO Orientado A Objetos
Metodologías Para AnáLisis Y DiseñO Orientado A ObjetosMetodologías Para AnáLisis Y DiseñO Orientado A Objetos
Metodologías Para AnáLisis Y DiseñO Orientado A Objetos
 
UML Architecture and Views
UML Architecture and ViewsUML Architecture and Views
UML Architecture and Views
 
Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)
 
Sistemas operativos-tarea-semana-5
Sistemas operativos-tarea-semana-5Sistemas operativos-tarea-semana-5
Sistemas operativos-tarea-semana-5
 
Base de datos: Algebra relacional
Base de datos: Algebra relacionalBase de datos: Algebra relacional
Base de datos: Algebra relacional
 
Metodologias modernas para el desarrollo de software
Metodologias modernas para el desarrollo de softwareMetodologias modernas para el desarrollo de software
Metodologias modernas para el desarrollo de software
 
Vista lógica
Vista lógicaVista lógica
Vista lógica
 
07 software connectors
07 software connectors07 software connectors
07 software connectors
 
Tipos de proyectos informáticos, actuales y emergentes
Tipos de proyectos informáticos, actuales y emergentesTipos de proyectos informáticos, actuales y emergentes
Tipos de proyectos informáticos, actuales y emergentes
 
Ejemplo de ingeniería de software V 2.0
Ejemplo de ingeniería de software V 2.0Ejemplo de ingeniería de software V 2.0
Ejemplo de ingeniería de software V 2.0
 

Destaque (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
 

Semelhante a Unit Testing with Mock Objects

Semelhante 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
 

Mais 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
 

Mais 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

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
 
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
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
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
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilJuanGallardo438714
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxlosdiosesmanzaneros
 

Último (15)

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
 
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
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
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
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.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