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

クラスローダーについて
クラスローダーについてクラスローダーについて
クラスローダーについて
Suguru ARAKAWA
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
 

La actualidad más candente (20)

Lua文化の伝承!? WFSにおけるイベントスクリプト活用術〜すべてはより良いコンテンツ制作のために〜
Lua文化の伝承!? WFSにおけるイベントスクリプト活用術〜すべてはより良いコンテンツ制作のために〜Lua文化の伝承!? WFSにおけるイベントスクリプト活用術〜すべてはより良いコンテンツ制作のために〜
Lua文化の伝承!? WFSにおけるイベントスクリプト活用術〜すべてはより良いコンテンツ制作のために〜
 
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
 
Emacs上のターミナルを最強に
Emacs上のターミナルを最強にEmacs上のターミナルを最強に
Emacs上のターミナルを最強に
 
クラスローダーについて
クラスローダーについてクラスローダーについて
クラスローダーについて
 
twMVC#44 如何測試與保護你的 web application with playwright
twMVC#44 如何測試與保護你的 web application with playwrighttwMVC#44 如何測試與保護你的 web application with playwright
twMVC#44 如何測試與保護你的 web application with playwright
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
ビルド職人の朝は早い
ビルド職人の朝は早いビルド職人の朝は早い
ビルド職人の朝は早い
 
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
 
gRPC入門
gRPC入門gRPC入門
gRPC入門
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
 
Introducing Async/Await
Introducing Async/AwaitIntroducing Async/Await
Introducing Async/Await
 
【社内勉強会】弊社でGit!実案件での運用
【社内勉強会】弊社でGit!実案件での運用【社内勉強会】弊社でGit!実案件での運用
【社内勉強会】弊社でGit!実案件での運用
 
Introduction to react_js
Introduction to react_jsIntroduction to react_js
Introduction to react_js
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
 
Ruby 3の型推論やってます
Ruby 3の型推論やってますRuby 3の型推論やってます
Ruby 3の型推論やってます
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
 
Typescript overview
Typescript overviewTypescript overview
Typescript overview
 

Similar a Test doubles

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
 
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
 
Unit Testing with Mock Objects
Unit Testing with Mock ObjectsUnit Testing with Mock Objects
Unit Testing with Mock Objects
Angel Nuñez
 

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 (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 (6)

Tkinter para python (curso de interfaces gráficas)
Tkinter para python (curso de interfaces gráficas)Tkinter para python (curso de interfaces gráficas)
Tkinter para python (curso de interfaces gráficas)
 
Ciberseguridad y Seguridad Informática Franco Correa Grupo B.pptx
Ciberseguridad y Seguridad Informática Franco Correa Grupo B.pptxCiberseguridad y Seguridad Informática Franco Correa Grupo B.pptx
Ciberseguridad y Seguridad Informática Franco Correa Grupo B.pptx
 
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
 
LA CALIDAD DE LA INFORMACION EN LA NUEVA ERA DEL INTERNET
LA CALIDAD DE LA INFORMACION  EN LA NUEVA ERA DEL INTERNETLA CALIDAD DE LA INFORMACION  EN LA NUEVA ERA DEL INTERNET
LA CALIDAD DE LA INFORMACION EN LA NUEVA ERA DEL INTERNET
 
Virus informático (tipos y opciones para prevenir)
Virus informático (tipos y opciones para prevenir)Virus informático (tipos y opciones para prevenir)
Virus informático (tipos y opciones para prevenir)
 
CIBERSEGURIDAD Y SEGURIDAD INFORMÁTICA.pptx
CIBERSEGURIDAD  Y SEGURIDAD INFORMÁTICA.pptxCIBERSEGURIDAD  Y SEGURIDAD INFORMÁTICA.pptx
CIBERSEGURIDAD Y SEGURIDAD INFORMÁTICA.pptx
 

Test doubles