SlideShare una empresa de Scribd logo
TEST DOUBLES
Test Doubles
• Dobles de cine de acción

• También conocidos como “Mocks" aunque
estos son un tipo concreto de doble (Mocks
Aren't Stubs)

• Fakes, Stubs, Mocks, Spies, Dummies.
Resuelven
• Problemas de dependencia:

• Tests lentos.

• Servicios u objetos no disponibles.

• Falta de separación en la colaboración entre
objetos.
Interacción entre SUT
(object under test) y sus
colaboradores
Interación
Tipos
• Dummies

• Stubs

• Fakes

• Mocks

• Spies
Dummy
• Se pasa un objeto pero no se usa. Solo sirve para
cumplir una dependencia (cumplir lista
parámetros).

• Objetos que no afectan al comportamiento que se
quiere testear, no se usan.
Dummy
https://adamcod.es/2014/05/15/test-doubles-mock-vs-stub.html
Stub
• Almacena datos o una respuesta predefinida y la
devuelve cuando es invocado.

• Cuando no se quiere invocar a dependencias
reales con efectos colaterales o respuestas reales.
Stub
https://adamcod.es/2014/05/15/test-doubles-mock-vs-stub.html
Stub
https://blog.pragmatists.com/test-doubles-fakes-mocks-and-stubs-1a7491dfa3da
Fake
• Tienen una implementación funcional pero no es
igual que la real. En general, toman un atajo y tienen
una versión simplificada del código de producción.

• P.e. “In memory database” en vez de la base de
datos real. RouteBuilder con clave/valor directo.

• Se difieren del Stub en que implementan lógica
para dar la respuesta.

• Permite verificar estado resultante.
Fake
https://adamcod.es/2014/05/15/test-doubles-mock-vs-stub.html
Spy
• Sirve para hacer aserciones de si algo ha ocurrido.

• Permite preguntarle si cierta llamada se ha hecho o
con qué valores se ha llamado.

• Recuerda llamadas y observa silenciosamente. No
hace verificaciones.
Spy
https://adamcod.es/2014/05/15/test-doubles-mock-vs-stub.html
Mock
• Validan que el comportamiento deseado haya ocurrido.

• Todos los anteriores verifican el estado. El mock verifica el
comportamiento.

• Un mock dice “Espero que el método a se halla llamado y
sino lanzo un error”.

• Qué métodos, en qué orden, con qué parámetros, número
de veces, etc.

• Fallan si lo que esperan no ocurre o si ocurren otras cosas
adicionales que no se espera.
Mock
https://adamcod.es/2014/05/15/test-doubles-mock-vs-stub.html
Mock
https://blog.pragmatists.com/test-doubles-fakes-mocks-and-stubs-1a7491dfa3da
Construcción
• A mano

• Herramientas:

• Prophecy, mockery, php-mock…

• Sinon, jsmock…

• Mockito…
Prophecy
Stub
Stub
Mock
Spy
Estado / Comportamiento
• Test de estado: Verifican el estado final tras una
operación en el código de test.

• Test de comportamiento: Verifican como el código
de test interacciones con sus colaboradores

• Diferentes estrategias igualmente válidas. Elegir la
mejor forma según el código a testear.
Escuelas
• Classicists (State based, Detroit/Chicago) 

• Mockists (Interaction based, London).
Mockist
• Mocks para toda las dependencias.

• Favorecen el testing para informar decisiones de
diseño.

• Testear SUT completamente aislado.
Classic
• Usar mocks solo para dependencias raras o complejas,
favoreciendo los objetos reales.

• Minimizar acoplamiento entre tests e implementación.

• Testear pequeños clusters de objetos y no en aislamiento.

• Piensan que mockist esta acoplado a la implementación,
mientras que el SUT debería ser una caja negra y solo
pensar en la interfaz externa.

• Piensan que la independencia de los tests es menos
importante que el testear en base al estado.
Pueden guiar la
definición de tipos
(colaboradores) desconocidos
Design Upfront (Just in time design)

Need Driven Development

Growing Object Oriented Software Guided by Tests
Peligros
• Palabra mock: Entender el concepto que hay
detrás y los diferentes tipos.

• Sobre especificar el funcionamiento del SUT y no
en el resultado.

• Tests frágiles que fallan cuando se cambia la
implementación.

• Integraciones no testadas realmente.
Recomendaciones
• No mockear “Value objects”.

• No mockear clases concretas.

• Mockear puertos.

• Mockear clases difíciles de construir.

• Mockear en tests de SUTs que solo interactúan.
Resumen
• Resuelven problemas de dependencia.

• Interacción entre SUT y colaboradores.

• Guiar definición de tipos (colaboradores).
No puedes testear lo
que no controlas
Injectar dependencias

Delegar en colaboradores

Más contenido relacionado

La actualidad más candente

Introduction to REST - API
Introduction to REST - APIIntroduction to REST - API
Introduction to REST - API
Chetan Gadodia
 
Internet of things unit-1
Internet of things unit-1Internet of things unit-1
Internet of things unit-1
Srimatre K
 
IFTTT Introduction
IFTTT IntroductionIFTTT Introduction
IFTTT Introduction
Daiki Ichikawa
 
Data-Centric Approach for Project Delivery
Data-Centric Approach for Project DeliveryData-Centric Approach for Project Delivery
Data-Centric Approach for Project Delivery
AVEVA Group plc
 
Sitecore code review checklist
Sitecore code review checklistSitecore code review checklist
Sitecore code review checklist
Gopikrishna Gujjula
 
How Internet of Things Works | IoT Examples | IoT Applications
How Internet of Things Works | IoT Examples | IoT ApplicationsHow Internet of Things Works | IoT Examples | IoT Applications
How Internet of Things Works | IoT Examples | IoT Applications
Anand SFJ
 
SharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote AuthenticationSharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote AuthenticationAdil Ansari
 
Application development for the internet of things
Application development for the internet of thingsApplication development for the internet of things
Application development for the internet of thingsPankesh Patel
 
Angular
AngularAngular
Angular
Lilia Sfaxi
 
Internet of things (iot)
Internet of things (iot)Internet of things (iot)
Internet of things (iot)
shubhamyadav613
 
IoT Technology Tutorial | IoT Technology Stack | IoT Project Hands-On | Edureka
IoT Technology Tutorial | IoT Technology Stack | IoT Project Hands-On | EdurekaIoT Technology Tutorial | IoT Technology Stack | IoT Project Hands-On | Edureka
IoT Technology Tutorial | IoT Technology Stack | IoT Project Hands-On | Edureka
Edureka!
 
Actions and menus in odoo 16
Actions and menus in odoo 16Actions and menus in odoo 16
Actions and menus in odoo 16
Celine George
 
Ingesting streaming data into Graph Database
Ingesting streaming data into Graph DatabaseIngesting streaming data into Graph Database
Ingesting streaming data into Graph Database
Guido Schmutz
 
Rest API
Rest APIRest API
IoT security (Internet of Things)
IoT security (Internet of Things)IoT security (Internet of Things)
IoT security (Internet of Things)
Sanjay Kumar (Seeking options outside India)
 
Oracle Forms: Record Groups
Oracle Forms: Record GroupsOracle Forms: Record Groups
Oracle Forms: Record Groups
Sekhar Byna
 
Introdução ao ASP .NET Web API
Introdução ao ASP .NET Web APIIntrodução ao ASP .NET Web API
Introdução ao ASP .NET Web API
Vinicius Mussak
 
Reactive programming in PHP
Reactive programming in PHPReactive programming in PHP
Reactive programming in PHP
Johney Park
 
Best practices for RESTful web service design
Best practices for RESTful web service designBest practices for RESTful web service design
Best practices for RESTful web service design
Ramin Orujov
 

La actualidad más candente (20)

Introduction to REST - API
Introduction to REST - APIIntroduction to REST - API
Introduction to REST - API
 
Internet of things unit-1
Internet of things unit-1Internet of things unit-1
Internet of things unit-1
 
IFTTT Introduction
IFTTT IntroductionIFTTT Introduction
IFTTT Introduction
 
Data-Centric Approach for Project Delivery
Data-Centric Approach for Project DeliveryData-Centric Approach for Project Delivery
Data-Centric Approach for Project Delivery
 
Sitecore code review checklist
Sitecore code review checklistSitecore code review checklist
Sitecore code review checklist
 
How Internet of Things Works | IoT Examples | IoT Applications
How Internet of Things Works | IoT Examples | IoT ApplicationsHow Internet of Things Works | IoT Examples | IoT Applications
How Internet of Things Works | IoT Examples | IoT Applications
 
SharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote AuthenticationSharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote Authentication
 
Application development for the internet of things
Application development for the internet of thingsApplication development for the internet of things
Application development for the internet of things
 
Angular
AngularAngular
Angular
 
Internet of things (iot)
Internet of things (iot)Internet of things (iot)
Internet of things (iot)
 
IoT Technology Tutorial | IoT Technology Stack | IoT Project Hands-On | Edureka
IoT Technology Tutorial | IoT Technology Stack | IoT Project Hands-On | EdurekaIoT Technology Tutorial | IoT Technology Stack | IoT Project Hands-On | Edureka
IoT Technology Tutorial | IoT Technology Stack | IoT Project Hands-On | Edureka
 
Actions and menus in odoo 16
Actions and menus in odoo 16Actions and menus in odoo 16
Actions and menus in odoo 16
 
Ingesting streaming data into Graph Database
Ingesting streaming data into Graph DatabaseIngesting streaming data into Graph Database
Ingesting streaming data into Graph Database
 
Rest API
Rest APIRest API
Rest API
 
IoT security (Internet of Things)
IoT security (Internet of Things)IoT security (Internet of Things)
IoT security (Internet of Things)
 
Oracle Forms: Record Groups
Oracle Forms: Record GroupsOracle Forms: Record Groups
Oracle Forms: Record Groups
 
Introdução ao ASP .NET Web API
Introdução ao ASP .NET Web APIIntrodução ao ASP .NET Web API
Introdução ao ASP .NET Web API
 
Reactive programming in PHP
Reactive programming in PHPReactive programming in PHP
Reactive programming in PHP
 
People soft basics
People soft basicsPeople soft basics
People soft basics
 
Best practices for RESTful web service design
Best practices for RESTful web service designBest practices for RESTful web service design
Best practices for RESTful web service design
 

Similar a Test doubles

Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
TestingUy
 
Doble o nada
Doble o nadaDoble o nada
Test unitarios
Test unitariosTest unitarios
Test unitarios
Donewtech Solutions
 
Testing en proyectos Grails del día a día. Greach 2013
Testing en proyectos Grails del día a día. Greach 2013Testing en proyectos Grails del día a día. Greach 2013
Testing en proyectos Grails del día a día. Greach 2013
Dani Latorre
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishAkamon Engineering
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
 
To mock or not to mock
To mock or not to mockTo mock or not to mock
To mock or not to mock
Eloi Poch
 
Estrategias de aplicación de pruebas
Estrategias de aplicación de pruebasEstrategias de aplicación de pruebas
Estrategias de aplicación de pruebasCristi Coba
 
20180313 Keep Calm And Test Your Code RiojaDotNet
20180313 Keep Calm And Test Your Code RiojaDotNet20180313 Keep Calm And Test Your Code RiojaDotNet
20180313 Keep Calm And Test Your Code RiojaDotNet
albertortizcape
 
Tdd - Primeros Pasos
Tdd - Primeros PasosTdd - Primeros Pasos
Tdd - Primeros Pasos
Alejandro Pérez García
 
Unit Testing with Mock Objects
Unit Testing with Mock ObjectsUnit Testing with Mock Objects
Unit Testing with Mock ObjectsAngel Nuñez
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
Uzi Mamani Fernández
 
Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDD
Fernando Perez
 
Cobertura de código con test funcionales para superhéroes
Cobertura de código con test funcionales para superhéroesCobertura de código con test funcionales para superhéroes
Cobertura de código con test funcionales para superhéroes
atSistemas
 
TDD+CI con Teamcity
TDD+CI con TeamcityTDD+CI con Teamcity
TDD+CI con Teamcity
Pedro J. Molina
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubs
Alberto Perdomo
 
Buenas prácticas vs La vida real
Buenas prácticas vs La vida realBuenas prácticas vs La vida real
Buenas prácticas vs La vida real
usitdev
 
Test Automation .NET
Test Automation .NETTest Automation .NET
Test Automation .NET
Angel Nuñez
 
Clean code 4-6
Clean code 4-6Clean code 4-6
Clean code 4-6
540deg
 

Similar a Test doubles (20)

Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
 
Doble o nada
Doble o nadaDoble o nada
Doble o nada
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
 
Testing en proyectos Grails del día a día. Greach 2013
Testing en proyectos Grails del día a día. Greach 2013Testing en proyectos Grails del día a día. Greach 2013
Testing en proyectos Grails del día a día. Greach 2013
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
To mock or not to mock
To mock or not to mockTo mock or not to mock
To mock or not to mock
 
Estrategias de aplicación de pruebas
Estrategias de aplicación de pruebasEstrategias de aplicación de pruebas
Estrategias de aplicación de pruebas
 
20180313 Keep Calm And Test Your Code RiojaDotNet
20180313 Keep Calm And Test Your Code RiojaDotNet20180313 Keep Calm And Test Your Code RiojaDotNet
20180313 Keep Calm And Test Your Code RiojaDotNet
 
Tdd - Primeros Pasos
Tdd - Primeros PasosTdd - Primeros Pasos
Tdd - Primeros Pasos
 
Unit Testing with Mock Objects
Unit Testing with Mock ObjectsUnit Testing with Mock Objects
Unit Testing with Mock Objects
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDD
 
Cobertura de código con test funcionales para superhéroes
Cobertura de código con test funcionales para superhéroesCobertura de código con test funcionales para superhéroes
Cobertura de código con test funcionales para superhéroes
 
TDD+CI con Teamcity
TDD+CI con TeamcityTDD+CI con Teamcity
TDD+CI con Teamcity
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubs
 
Buenas prácticas vs La vida real
Buenas prácticas vs La vida realBuenas prácticas vs La vida real
Buenas prácticas vs La vida real
 
Test Automation .NET
Test Automation .NETTest Automation .NET
Test Automation .NET
 
Clean code 4-6
Clean code 4-6Clean code 4-6
Clean code 4-6
 

Más de 540deg

Katayuno TCR (test && commit || revert)
Katayuno TCR (test && commit || revert)Katayuno TCR (test && commit || revert)
Katayuno TCR (test && commit || revert)
540deg
 
Clean code 9
Clean code 9Clean code 9
Clean code 9
540deg
 
Clean code 10-11
Clean code 10-11Clean code 10-11
Clean code 10-11
540deg
 
Clean code 7-8
Clean code 7-8Clean code 7-8
Clean code 7-8
540deg
 
Clean code 1-3
Clean code 1-3Clean code 1-3
Clean code 1-3
540deg
 
Arquitectura hexagonal
Arquitectura hexagonalArquitectura hexagonal
Arquitectura hexagonal
540deg
 

Más de 540deg (6)

Katayuno TCR (test && commit || revert)
Katayuno TCR (test && commit || revert)Katayuno TCR (test && commit || revert)
Katayuno TCR (test && commit || revert)
 
Clean code 9
Clean code 9Clean code 9
Clean code 9
 
Clean code 10-11
Clean code 10-11Clean code 10-11
Clean code 10-11
 
Clean code 7-8
Clean code 7-8Clean code 7-8
Clean code 7-8
 
Clean code 1-3
Clean code 1-3Clean code 1-3
Clean code 1-3
 
Arquitectura hexagonal
Arquitectura hexagonalArquitectura hexagonal
Arquitectura hexagonal
 

Último

Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdf
juanjosebarreiro704
 
FICHA DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA  DE TRABAJO DE CREACION DE TABLAS EN WORDFICHA  DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA DE TRABAJO DE CREACION DE TABLAS EN WORD
RobertSotilLujn
 
experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...
cuentauniversidad34
 
Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La Salle
Ecaresoft Inc.
 
trabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docxtrabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docx
lasocharfuelan123
 
infografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de softwareinfografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de software
oscartorres960914
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitales
juanorejuela499
 
Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipo
nicromante2000
 
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJECONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
SamuelGampley
 
Los desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMsLos desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMs
Federico Toledo
 

Último (10)

Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdf
 
FICHA DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA  DE TRABAJO DE CREACION DE TABLAS EN WORDFICHA  DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA DE TRABAJO DE CREACION DE TABLAS EN WORD
 
experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...
 
Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La Salle
 
trabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docxtrabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docx
 
infografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de softwareinfografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de software
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitales
 
Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipo
 
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJECONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
 
Los desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMsLos desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMs
 

Test doubles