SlideShare a Scribd company 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

More Related Content

Similar to 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 - Spanish
Jordi 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 - Spanish
Akamon 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 - Spanish
Jordi 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 pruebas
Cristi 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 Objects
Angel 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 to 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
 

More from 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
 

More from 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
 

Recently uploaded

TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptxTARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
dayronfabricioruizmo
 
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
Maria Celeste Trujillo Cruz
 
primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
eliersin13
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
micarnavaltupatrimon
 
Introduccion al Lenguaje de Programación C++
Introduccion al Lenguaje de Programación  C++Introduccion al Lenguaje de Programación  C++
Introduccion al Lenguaje de Programación C++
PaulDelgadoSoto
 
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcelherramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
Eduardo455921
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
micarnavaltupatrimon
 

Recently uploaded (7)

TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptxTARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
 
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
 
primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
 
Introduccion al Lenguaje de Programación C++
Introduccion al Lenguaje de Programación  C++Introduccion al Lenguaje de Programación  C++
Introduccion al Lenguaje de Programación C++
 
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcelherramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
 

Test doubles