SlideShare une entreprise Scribd logo
1  sur  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.

Contenu connexe

Tendances

SOA - Arquitetura Orientada a Serviços
SOA - Arquitetura Orientada a ServiçosSOA - Arquitetura Orientada a Serviços
SOA - Arquitetura Orientada a Serviços
alinebicudo
 
Participação do Time de Teste em Projetos Scrum
Participação do Time de Teste em Projetos ScrumParticipação do Time de Teste em Projetos Scrum
Participação do Time de Teste em Projetos Scrum
Gustavo Quezada
 

Tendances (20)

POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
 
MPS Br Nível F - Gerência de Configuração - GCO
MPS Br Nível F - Gerência de Configuração - GCO MPS Br Nível F - Gerência de Configuração - GCO
MPS Br Nível F - Gerência de Configuração - GCO
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
Introdução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIntrodução a Arquitetura de Sistemas
Introdução a Arquitetura de Sistemas
 
Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de software
 
Introdução aos Sistemas Distribuídos
Introdução aos Sistemas DistribuídosIntrodução aos Sistemas Distribuídos
Introdução aos Sistemas Distribuídos
 
SOA - Arquitetura Orientada a Serviços
SOA - Arquitetura Orientada a ServiçosSOA - Arquitetura Orientada a Serviços
SOA - Arquitetura Orientada a Serviços
 
Aula 6 - Qualidade de Software
Aula 6 - Qualidade de SoftwareAula 6 - Qualidade de Software
Aula 6 - Qualidade de Software
 
O Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareO Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de Software
 
Participação do Time de Teste em Projetos Scrum
Participação do Time de Teste em Projetos ScrumParticipação do Time de Teste em Projetos Scrum
Participação do Time de Teste em Projetos Scrum
 
Aula02 - JavaScript
Aula02 - JavaScriptAula02 - JavaScript
Aula02 - JavaScript
 
Teste de Software - Introdução
Teste de Software - IntroduçãoTeste de Software - Introdução
Teste de Software - Introdução
 
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
 
UML
UMLUML
UML
 
Arquitetura cliente servidor
Arquitetura cliente servidorArquitetura cliente servidor
Arquitetura cliente servidor
 
Aula3 engenharia requisitos
Aula3 engenharia requisitosAula3 engenharia requisitos
Aula3 engenharia requisitos
 
Qualidade de Software: Teste de software
Qualidade de Software: Teste de softwareQualidade de Software: Teste de software
Qualidade de Software: Teste de software
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software Pressman
 
Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01
 

En vedette

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
clopezh2009
 
Maryury Marquez Diapositivas con Hipervínculos
Maryury Marquez Diapositivas con HipervínculosMaryury Marquez Diapositivas con Hipervínculos
Maryury Marquez Diapositivas con Hipervínculos
Kattylopez
 
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
 
Los coches del Jesus
Los coches del JesusLos coches del Jesus
Los coches del Jesus
2Dbiada
 

En vedette (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
 

Similaire à Unit Testing with Mock Objects

Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
kaolong
 

Similaire à 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
 

Plus de Angel Nuñez

Plus 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
 

Dernier

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
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Dernier (11)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
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
 
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
 
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
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
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.
 
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
 
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
 
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
 
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...
 
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
 

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