SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
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

ေမာင္လွ ဇာတ္လမ္း ၂
ေမာင္လွ ဇာတ္လမ္း ၂ေမာင္လွ ဇာတ္လမ္း ၂
ေမာင္လွ ဇာတ္လမ္း ၂babycandy007
 
အခ်စ္ေတြနဲ႔ျပည့္ေနတဲံအိမ္ကေလး
အခ်စ္ေတြနဲ႔ျပည့္ေနတဲံအိမ္ကေလးအခ်စ္ေတြနဲ႔ျပည့္ေနတဲံအိမ္ကေလး
အခ်စ္ေတြနဲ႔ျပည့္ေနတဲံအိမ္ကေလးkoluzoe
 
ႀကပ္ေနရင္ အပ်ိဳပဲ
ႀကပ္ေနရင္ အပ်ိဳပဲႀကပ္ေနရင္ အပ်ိဳပဲ
ႀကပ္ေနရင္ အပ်ိဳပဲkoluzoe
 
ရင္ခုန္သံအစစ္
ရင္ခုန္သံအစစ္ရင္ခုန္သံအစစ္
ရင္ခုန္သံအစစ္babycandy007
 
ေျမြေပြးမ
ေျမြေပြးမေျမြေပြးမ
ေျမြေပြးမbabycandy007
 
Redmineをつかったスクラム開発のはじめの一歩
Redmineをつかったスクラム開発のはじめの一歩Redmineをつかったスクラム開発のはじめの一歩
Redmineをつかったスクラム開発のはじめの一歩kiita312
 
အႀကံႀကီးသူ
အႀကံႀကီးသူအႀကံႀကီးသူ
အႀကံႀကီးသူbabycandy007
 
ဆရာမေလးရယ္၊ တပည့္မေလးရယ္
ဆရာမေလးရယ္၊ တပည့္မေလးရယ္ဆရာမေလးရယ္၊ တပည့္မေလးရယ္
ဆရာမေလးရယ္၊ တပည့္မေလးရယ္babycandy007
 
Elemtarythirdedwkbk
ElemtarythirdedwkbkElemtarythirdedwkbk
Elemtarythirdedwkbknataeine
 
အလွမျပည့္ခင္ေၾကြတဲ့ပန္း
အလွမျပည့္ခင္ေၾကြတဲ့ပန္းအလွမျပည့္ခင္ေၾကြတဲ့ပန္း
အလွမျပည့္ခင္ေၾကြတဲ့ပန္းkoluzoe
 
Paso a paso - Regulación del GNC [por Cristian Bouzas para Amigos Renault 9 A...
Paso a paso - Regulación del GNC [por Cristian Bouzas para Amigos Renault 9 A...Paso a paso - Regulación del GNC [por Cristian Bouzas para Amigos Renault 9 A...
Paso a paso - Regulación del GNC [por Cristian Bouzas para Amigos Renault 9 A...AmigosRenault9Arg
 
Touchstone Student's Book 1
Touchstone Student's Book 1Touchstone Student's Book 1
Touchstone Student's Book 1Sharon Silva
 
မိန္းမလွကြ်န္း
မိန္းမလွကြ်န္းမိန္းမလွကြ်န္း
မိန္းမလွကြ်န္းkoluzoe
 
မက္မေျပ
မက္မေျပမက္မေျပ
မက္မေျပkoluzoe
 
မမျဖဴ
မမျဖဴမမျဖဴ
မမျဖဴkoluzoe
 
FP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondFP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondMario Fusco
 
Psd - Programma Structuur Diagram
Psd - Programma Structuur DiagramPsd - Programma Structuur Diagram
Psd - Programma Structuur Diagramiahpostmes
 
စိမ့္
စိမ့္စိမ့္
စိမ့္koluzoe
 
Grammar book
Grammar book Grammar book
Grammar book SkyEdge
 

La actualidad más candente (20)

ေမာင္လွ ဇာတ္လမ္း ၂
ေမာင္လွ ဇာတ္လမ္း ၂ေမာင္လွ ဇာတ္လမ္း ၂
ေမာင္လွ ဇာတ္လမ္း ၂
 
အခ်စ္ေတြနဲ႔ျပည့္ေနတဲံအိမ္ကေလး
အခ်စ္ေတြနဲ႔ျပည့္ေနတဲံအိမ္ကေလးအခ်စ္ေတြနဲ႔ျပည့္ေနတဲံအိမ္ကေလး
အခ်စ္ေတြနဲ႔ျပည့္ေနတဲံအိမ္ကေလး
 
ႀကပ္ေနရင္ အပ်ိဳပဲ
ႀကပ္ေနရင္ အပ်ိဳပဲႀကပ္ေနရင္ အပ်ိဳပဲ
ႀကပ္ေနရင္ အပ်ိဳပဲ
 
ရင္ခုန္သံအစစ္
ရင္ခုန္သံအစစ္ရင္ခုန္သံအစစ္
ရင္ခုန္သံအစစ္
 
ေျမြေပြးမ
ေျမြေပြးမေျမြေပြးမ
ေျမြေပြးမ
 
Redmineをつかったスクラム開発のはじめの一歩
Redmineをつかったスクラム開発のはじめの一歩Redmineをつかったスクラム開発のはじめの一歩
Redmineをつかったスクラム開発のはじめの一歩
 
အႀကံႀကီးသူ
အႀကံႀကီးသူအႀကံႀကီးသူ
အႀကံႀကီးသူ
 
ဆရာမေလးရယ္၊ တပည့္မေလးရယ္
ဆရာမေလးရယ္၊ တပည့္မေလးရယ္ဆရာမေလးရယ္၊ တပည့္မေလးရယ္
ဆရာမေလးရယ္၊ တပည့္မေလးရယ္
 
Elemtarythirdedwkbk
ElemtarythirdedwkbkElemtarythirdedwkbk
Elemtarythirdedwkbk
 
အလွမျပည့္ခင္ေၾကြတဲ့ပန္း
အလွမျပည့္ခင္ေၾကြတဲ့ပန္းအလွမျပည့္ခင္ေၾကြတဲ့ပန္း
အလွမျပည့္ခင္ေၾကြတဲ့ပန္း
 
Paso a paso - Regulación del GNC [por Cristian Bouzas para Amigos Renault 9 A...
Paso a paso - Regulación del GNC [por Cristian Bouzas para Amigos Renault 9 A...Paso a paso - Regulación del GNC [por Cristian Bouzas para Amigos Renault 9 A...
Paso a paso - Regulación del GNC [por Cristian Bouzas para Amigos Renault 9 A...
 
Touchstone Student's Book 1
Touchstone Student's Book 1Touchstone Student's Book 1
Touchstone Student's Book 1
 
မိန္းမလွကြ်န္း
မိန္းမလွကြ်န္းမိန္းမလွကြ်န္း
မိန္းမလွကြ်န္း
 
မက္မေျပ
မက္မေျပမက္မေျပ
မက္မေျပ
 
မမျဖဴ
မမျဖဴမမျဖဴ
မမျဖဴ
 
FP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondFP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyond
 
Psd - Programma Structuur Diagram
Psd - Programma Structuur DiagramPsd - Programma Structuur Diagram
Psd - Programma Structuur Diagram
 
စိမ့္
စိမ့္စိမ့္
စိမ့္
 
Grammar book
Grammar book Grammar book
Grammar book
 
Mandaean holy book Ginza Rba - Mandaic
Mandaean holy book Ginza Rba - MandaicMandaean holy book Ginza Rba - Mandaic
Mandaean holy book Ginza Rba - Mandaic
 

Similar a Test Doubles: Dummies, Stubs, Fakes, Mocks y Spies

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
 
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 2013Dani 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 - 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
 
To mock or not to mock
To mock or not to mockTo mock or not to mock
To mock or not to mockEloi 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 RiojaDotNetalbertortizcape
 
Unit Testing with Mock Objects
Unit Testing with Mock ObjectsUnit Testing with Mock Objects
Unit Testing with Mock ObjectsAngel Nuñez
 
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 TDDFernando 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éroesatSistemas
 
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 stubsAlberto 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 realusitdev
 
Test Automation .NET
Test Automation .NETTest Automation .NET
Test Automation .NETAngel Nuñez
 
Clean code 4-6
Clean code 4-6Clean code 4-6
Clean code 4-6540deg
 

Similar a Test Doubles: Dummies, Stubs, Fakes, Mocks y Spies (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 9540deg
 
Clean code 10-11
Clean code 10-11Clean code 10-11
Clean code 10-11540deg
 
Clean code 7-8
Clean code 7-8Clean code 7-8
Clean code 7-8540deg
 
Clean code 1-3
Clean code 1-3Clean code 1-3
Clean code 1-3540deg
 
Arquitectura hexagonal
Arquitectura hexagonalArquitectura hexagonal
Arquitectura hexagonal540deg
 

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
 

Test Doubles: Dummies, Stubs, Fakes, Mocks y Spies