SlideShare una empresa de Scribd logo
UnitTestingwithMockObjectsAngel Núñez Salazar@snahider / snahider.blogspot.com
Tipos de TestEs una nomenclatura caótica y no existe una sola categoría.Alcance: Unidades, Componentes, SistemasEtapa: Integración, aceptación, regresiónEnfoque: Performance, funcionalesVisibilidad: White / black boxEl tipo de test se convierte en un atributo.
Sistema3 Tipos Importantes de Test+IntegraciónUnitarios-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 UnitarioCreamos todas las precondiciones y entradas necesarias.ARRANGERealizamos la acción del objeto que estamos probando.ACTASSERTVerificamos los resultados esperados.
Propiedades de un buen Test UnitarioFast: 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ónSe 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 RainsbergerMuy lentos en comparación con los test unitarios.
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.Cuando usar un Test Unitario o IntegraciónUsar test unitarios para probar cualquier tipo de código lógico y condiciones básicas de nuestro sistema.El N° de Test Unitarios es proporcional al tamaño del sistema.Usar los test de integración para verificar errores a nivel de sistema (Networking, BD Schema, caching, etc)y para probar solo aspectos específicos del código para hablar con el exterior.El N° de Test de Integración es proporcional al número de interacciones con el exterior que tenga el sistema.
Pero aún tenemos un problemaNo  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 ContextoDos 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 DependenciasLas 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+Extraer el contexto de dependencia de la clase y crear una abstracción de este contexto.  (Extraer una interfaz de la dependencia)
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)EjemploDesacoplando el código aplicando Inversión de Dependencias
¿ 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 DoublesSon 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 ?BDOtherClassOtherClassActOtherClassTestClassUnder TestFileSystemAssertOtherClassOtherClass
¿Cuál es el problema?Responsabilidades de la claseCreación de jerarquía de objetosLógica de Negocios
Encontrando la soluciónResponsabilidades de una clase externaResponsabilidades de la claseCreación de jerarquía de objetosLógica de Negocios
Encontrando la soluciónSimpleClassActSimpleClassTestClassUnder TestAssertSimpleClass
Mocking / StubbingMockMockSe 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.
IsolationMockingFrameworksNos permiten crear Test Doubles de manera más simple, rápida y sin errores.
Cuando escribimos Test Doublesmanuales tendemos a repetir el código..NET  : Moq, RhinoMock, TypemockJava  : Mockito, EasyMock, JmockRuby: RSpecBuilt-in, Mocha
Tipos de Test DoublesStubsMocksDummiesFakes
Test Doubles: StubsReemplaza una dependencia existente en el sistema de tal manera que el test no tenga que lidiar con la dependencia directamente.
El test tiene el control sobre este test double, por lo que puede indicarle respuestas predefinidas a ciertas llamadas.EjemploUtilizando un Stubpara realizar pruebas unitarias
Test Doubles: MocksNos 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 : MocksNo devuelve resultados predefinidos, sino está pendiente que el objeto en prueba interactúe con el de una manera esperada.
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. EjemploUtilizando un Mockpara realizar pruebas unitarias
Como los diferenciamos fácilmenteStub: 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 DoublesDummyObjetos que se encuentran instanciados pero nunca se utilizan, usualmente para llenar una lista de parámetros.FakeSimilares a un Stub o un Mock con la diferencia que el test no tiene el control sobre estos.
Todos los tipos de test son importantesUna buen conjunto de test unitarios es aún más efectivo si es acompañado de otros  tipos de test.
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.¿ Preguntas hasta aquí ?
¿ 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 testeabilidadAislar las dependencias e inyectarlas.
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.No realizar trabajo en el constructorMientras más trabajo hagamos en el constructor, más difícil será crear el objeto para hacer pruebas con el.
No realizar trabajo en el constructorSeñales de que existe este problema:
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

PDF
AWS 모바일 서비스로 성공하는 모바일 앱 만들기 (윤석찬) - AWS Webiniar 2015
DOCX
Contoh cover resensi
PPTX
IEL-1 Exploring Human Psychology through R. K. Narayan's Short Story_ 'An ...
PPTX
Python in Test automation
PDF
서버리스 애플리케이션 구축 패턴 및 구축 사례 - AWS Summit Seoul 2017
PDF
서버리스 웹 애플리케이션 구축 방법론::김현수:: AWS Summit Seoul 2018
PPTX
PDF
Testing with Express, Mocha & Chai
AWS 모바일 서비스로 성공하는 모바일 앱 만들기 (윤석찬) - AWS Webiniar 2015
Contoh cover resensi
IEL-1 Exploring Human Psychology through R. K. Narayan's Short Story_ 'An ...
Python in Test automation
서버리스 애플리케이션 구축 패턴 및 구축 사례 - AWS Summit Seoul 2017
서버리스 웹 애플리케이션 구축 방법론::김현수:: AWS Summit Seoul 2018
Testing with Express, Mocha & Chai

La actualidad más candente (7)

PPTX
An introduction to api testing | David Tzemach
PPTX
Adaptabilidade - Critérios Ergonômicos
PPT
Annotated scorpion
PDF
[AWS Dev Day] 앱 현대화 | DevOps 개발자가 되기 위한 쿠버네티스 핵심 활용 예제 알아보기 - 정영준 AWS 솔루션즈 아키...
PPTX
Blake's Shephard & Lamb poems with detailed notes and Illustrations
PDF
Amazon SageMaker를 이용한 예측 분석-남궁영환 솔루션즈 아키텍트, AWS
PPTX
A Grain of Wheat as a national epic of Anti-colonial struggle.
An introduction to api testing | David Tzemach
Adaptabilidade - Critérios Ergonômicos
Annotated scorpion
[AWS Dev Day] 앱 현대화 | DevOps 개발자가 되기 위한 쿠버네티스 핵심 활용 예제 알아보기 - 정영준 AWS 솔루션즈 아키...
Blake's Shephard & Lamb poems with detailed notes and Illustrations
Amazon SageMaker를 이용한 예측 분석-남궁영환 솔루션즈 아키텍트, AWS
A Grain of Wheat as a national epic of Anti-colonial struggle.
Publicidad

Destacado (20)

PPTX
Nutrición y alimentación. parte i
PDF
Apps Arredor dos libros
PPTX
Maryury Marquez Diapositivas con Hipervínculos
PPTX
Unah día padre2014.docx
PPTX
Social Media Marketing
PDF
Sesión PFPP
PPTX
Politicas educativas
PPTX
Hacia una educación sostenible
PDF
tungurahua
PPTX
Presentacion De Servicios
PPT
Cendoc fs
PPTX
Diapositivas De La Historia Y Al Tecnologia[1]
DOC
Guia Gelosia
PDF
Caso 3 infecciones pulmonares
PPS
Emprendimiento
PPT
Tecnologia educativa
ODP
Los coches del Jesus
PPT
Veteranos
Nutrición y alimentación. parte i
Apps Arredor dos libros
Maryury Marquez Diapositivas con Hipervínculos
Unah día padre2014.docx
Social Media Marketing
Sesión PFPP
Politicas educativas
Hacia una educación sostenible
tungurahua
Presentacion De Servicios
Cendoc fs
Diapositivas De La Historia Y Al Tecnologia[1]
Guia Gelosia
Caso 3 infecciones pulmonares
Emprendimiento
Tecnologia educativa
Los coches del Jesus
Veteranos
Publicidad

Similar a Unit Testing with Mock Objects (20)

PPTX
Pruebas Automatizadas
PPT
Prueba software orientado a objetos
PPS
Calidad del software cap3
PPTX
PPTX
Test Automation .NET
PPTX
Prueba unitaria
PPTX
Aw agiles2010 - dppt 1.1
PDF
Pruebas unitarias
DOCX
Ingenieria de sw Junit
PDF
Introducción a test unitarios y test de integración.pdf
PPTX
software testing
PPTX
Pruebas unitarias 7mo -b
PPTX
Pruebas de software
PDF
Presentación: xUnit y Junit
PPT
Test unitarios
PPT
Seminario de Test Development Driven
PPTX
Testeo unitario
PPTX
The art of unit testing
PPT
Junit y Jmock
PDF
Introduction to unit testing
Pruebas Automatizadas
Prueba software orientado a objetos
Calidad del software cap3
Test Automation .NET
Prueba unitaria
Aw agiles2010 - dppt 1.1
Pruebas unitarias
Ingenieria de sw Junit
Introducción a test unitarios y test de integración.pdf
software testing
Pruebas unitarias 7mo -b
Pruebas de software
Presentación: xUnit y Junit
Test unitarios
Seminario de Test Development Driven
Testeo unitario
The art of unit testing
Junit y Jmock
Introduction to unit testing

Más de Angel Nuñez (20)

PDF
Structural Agility
PDF
Architecting Sociotechnical Systems
PDF
Product Development Flow
PDF
Chaos Engineering
PDF
Hackeando la Cultura Organizacional
PDF
Liderazgo Transformacional
PDF
Liderazgo Transformacional y DevOps
PDF
Exploratory Testing
PDF
Coding Dojo
PDF
Kubernetes - Container Orchestration, Deployment and Scaling
PDF
Agile Test Strategy
PDF
Kubernetes - #gdglimasummit
PDF
Agile Testing - Software Testing Club
PDF
Kubernetes - #dockerconlima
PDF
Infrastructure as Code
PDF
Test Driven Infrastructure
PDF
Software Debt: Qué Es y Cómo Gestionarlo Holísticamente
PPTX
Unit testing
PPTX
Refactoring
PPTX
Refactoring to Patterns
Structural Agility
Architecting Sociotechnical Systems
Product Development Flow
Chaos Engineering
Hackeando la Cultura Organizacional
Liderazgo Transformacional
Liderazgo Transformacional y DevOps
Exploratory Testing
Coding Dojo
Kubernetes - Container Orchestration, Deployment and Scaling
Agile Test Strategy
Kubernetes - #gdglimasummit
Agile Testing - Software Testing Club
Kubernetes - #dockerconlima
Infrastructure as Code
Test Driven Infrastructure
Software Debt: Qué Es y Cómo Gestionarlo Holísticamente
Unit testing
Refactoring
Refactoring to Patterns

Último (20)

PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PPT
Que son las redes de computadores y sus partes
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PPTX
Presentación de Redes de Datos modelo osi
PDF
Influencia-del-uso-de-redes-sociales.pdf
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
SAP Transportation Management para LSP, TM140 Col18
PPT
introduccion a las_web en el 2025_mejoras.ppt
PDF
Estrategia de apoyo tecnología miguel angel solis
PDF
taller de informática - LEY DE OHM
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PDF
Diapositiva proyecto de vida, materia catedra
PDF
Maste clas de estructura metálica y arquitectura
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
Estrategia de apoyo tecnología grado 9-3
PDF
CyberOps Associate - Cisco Networking Academy
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
Que son las redes de computadores y sus partes
Plantilla para Diseño de Narrativas Transmedia.pdf
REDES INFORMATICAS REDES INFORMATICAS.pptx
Presentación de Redes de Datos modelo osi
Influencia-del-uso-de-redes-sociales.pdf
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
SAP Transportation Management para LSP, TM140 Col18
introduccion a las_web en el 2025_mejoras.ppt
Estrategia de apoyo tecnología miguel angel solis
taller de informática - LEY DE OHM
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Diapositiva proyecto de vida, materia catedra
Maste clas de estructura metálica y arquitectura
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
historia_web de la creacion de un navegador_presentacion.pptx
Estrategia de apoyo tecnología grado 9-3
CyberOps Associate - Cisco Networking Academy
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...

Unit Testing with Mock Objects

  • 2. Tipos de TestEs una nomenclatura caótica y no existe una sola categoría.Alcance: Unidades, Componentes, SistemasEtapa: Integración, aceptación, regresiónEnfoque: Performance, funcionalesVisibilidad: White / black boxEl tipo de test se convierte en un atributo.
  • 3. Sistema3 Tipos Importantes de Test+IntegraciónUnitarios-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 UnitarioCreamos todas las precondiciones y entradas necesarias.ARRANGERealizamos la acción del objeto que estamos probando.ACTASSERTVerificamos los resultados esperados.
  • 9. Propiedades de un buen Test UnitarioFast: 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ónSe encargan de realizar pruebas a dos o más módulos dependientes de software.
  • 12. ¿ Cuál es el problema con los test de integración?«Integration Test are a Vortex of Doom»J.B RainsbergerMuy lentos en comparación con los test unitarios.
  • 14. Difíciles de configurar y ejecutar de manera atómica.
  • 15. No nos dan una certeza de cuál ha sido el error.Cuando usar un Test Unitario o IntegraciónUsar test unitarios para probar cualquier tipo de código lógico y condiciones básicas de nuestro sistema.El N° de Test Unitarios es proporcional al tamaño del sistema.Usar los test de integración para verificar errores a nivel de sistema (Networking, BD Schema, caching, etc)y para probar solo aspectos específicos del código para hablar con el exterior.El N° de Test de Integración es proporcional al número de interacciones con el exterior que tenga el sistema.
  • 16. Pero aún tenemos un problemaNo 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 ContextoDos 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 DependenciasLas clases de alto nivel no deben depender directamente de clases de bajo nivel sino de abstracciones de estas clases.
  • 20. Inversión de Dependencias Inyección de Dependencias+Extraer el contexto de dependencia de la clase y crear una abstracción de este contexto. (Extraer una interfaz de la dependencia)
  • 21. 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)EjemploDesacoplando el código aplicando Inversión de Dependencias
  • 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 DoublesSon 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 ?BDOtherClassOtherClassActOtherClassTestClassUnder TestFileSystemAssertOtherClassOtherClass
  • 26. ¿Cuál es el problema?Responsabilidades de la claseCreación de jerarquía de objetosLógica de Negocios
  • 27. Encontrando la soluciónResponsabilidades de una clase externaResponsabilidades de la claseCreación de jerarquía de objetosLógica de Negocios
  • 29. Mocking / StubbingMockMockSe 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. IsolationMockingFrameworksNos permiten crear Test Doubles de manera más simple, rápida y sin errores.
  • 31. Cuando escribimos Test Doublesmanuales tendemos a repetir el código..NET : Moq, RhinoMock, TypemockJava : Mockito, EasyMock, JmockRuby: RSpecBuilt-in, Mocha
  • 32. Tipos de Test DoublesStubsMocksDummiesFakes
  • 33. Test Doubles: StubsReemplaza una dependencia existente en el sistema de tal manera que el test no tenga que lidiar con la dependencia directamente.
  • 34. El test tiene el control sobre este test double, por lo que puede indicarle respuestas predefinidas a ciertas llamadas.EjemploUtilizando un Stubpara realizar pruebas unitarias
  • 35. Test Doubles: MocksNos 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. Test Doubles : MocksNo devuelve resultados predefinidos, sino está pendiente que el objeto en prueba interactúe con el de una manera esperada.
  • 37. El Assert ya no se ejecuta sobre la clase en prueba sino sobre el mock.
  • 38. 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. EjemploUtilizando un Mockpara realizar pruebas unitarias
  • 39. Como los diferenciamos fácilmenteStub: 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 DoublesDummyObjetos que se encuentran instanciados pero nunca se utilizan, usualmente para llenar una lista de parámetros.FakeSimilares a un Stub o un Mock con la diferencia que el test no tiene el control sobre estos.
  • 41. Todos los tipos de test son importantesUna buen conjunto de test unitarios es aún más efectivo si es acompañado de otros tipos de test.
  • 42. Cada Tipo de test es una nueva capa de protección en nuestro sistema.
  • 43. El balance y aplicación efectiva de todos los tipos de test es lo que te dará beneficios.¿ Preguntas hasta aquí ?
  • 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. Como podemos mejorar la testeabilidadAislar las dependencias e inyectarlas.
  • 47. No realizar trabajo en el constructor.
  • 48. Preferir la composición sobre la herencia.
  • 49. Evitar métodos y clases estáticas o el patrón singleton.No realizar trabajo en el constructorMientras más trabajo hagamos en el constructor, más difícil será crear el objeto para hacer pruebas con el.
  • 50. No realizar trabajo en el constructorSeñales de que existe este problema:
  • 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. Si el constructor realiza bastante trabajo, estaremos forzados a realizar todo ese trabajo en los tests.CompositionoverInheritanceCompositionHerenciaLa herencia crea una fuerte relación entre la clase padre y las subclases; las subclases deben conocer muchos detalles de implementación de la clase padre. (Alta Dependencia)
  • 57. CompositionoverInheritanceEl propósito de la herencia es el polimorfismo y no la reutilización.
  • 58. Si no estamos sobrescribiendo, probablemente estemos abusando de la herencia.
  • 59. Elegir la composición por defecto.Evitar Métodos EstáticosLos métodos estáticos son código procedural y no Orientado a Objetos.Al momento de ejecutar un test unitario, instancio la clase e intercambio sus dependencias reales con testdoubles. El problema con código procedural es que no hay nada que inyectar ya que no existen objetos y por lo tanto los tests no tienen control sobre estos.
  • 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 IOCDependecyInyection: 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 ContainersHerramientas que nos permiten obtener la implementación concreta, de un objeto en tiempo de ejecución..Net: Windsor, StructureMapJava: Spring, PicoContainer