Skip to content
IRC-CodingIRC-Coding
Test DoublesStubMockFakeSpyUnit Tests

Test Doubles explicados: Stubs, Mocks, Fakes y Spys

Guía completa de Test Doubles: Stubs, Mocks, Fakes y Spys. Aprende cuándo usar cada uno con ejemplos prácticos.

S

schutzgeist

1 min read
Test Doubles explicados: Stubs, Mocks, Fakes y Spys

Testdoubles: Stubs vs. Mocks vs. Fakes vs. Spys

Este artículo es una explicación de conceptos sobre Testdoubles, incluyendo preguntas de examen y etiquetas.

En Resumen

  • Stub: devuelve respuestas predefinidas
  • Mock: verifica interacciones (expectativas)
  • Fake: implementación funcional simplificada
  • Spy: registra llamadas (combina Stub + Mock)

Descripción Técnica Concisa

Stub

Retorna respuestas fijas sin verificar el comportamiento. Ideal para tests sin estado.

Mock

Verifica si métodos específicos se invocaron con parámetros determinados. Útil cuando las interacciones son críticas.

Fake

Implementación que funciona pero simplificada (p. ej., base de datos en memoria). Excelente para tests unitarios similares a integración.

Spy

Almacena las llamadas y permite verificaciones posteriores (híbrido entre Stub y Mock).

Puntos Clave para Examen

  • Stub: predefinir respuestas, sin verificación de comportamiento
  • Mock: definir y verificar expectativas
  • Fake: simplificación funcional (p. ej., repositorio en memoria)
  • Spy: registrar llamadas, verificar después
  • Reglas de uso: Stub para estado, Mock para comportamiento, Fake para complejidad
  • Frameworks: Mockito, unittest.mock, Jest

Componentes Principales

  1. Stub (respuestas)
  2. Mock (expectativas)
  3. Fake (implementación simplificada)
  4. Spy (registro)
  5. Aislamiento de tests
  6. Uso de frameworks
  7. Setup/Teardown
  8. Assertions
  9. Verificación
  10. Mantenimiento

Ejemplo Práctico (Servicio de Descuentos)

// Stub
DiscountPolicy stub = new DiscountPolicyStub(10); // siempre 10%
int rabatt = service.berechneRabatt(kunde, artikel);

// Mock
DiscountPolicy mock = mock(DiscountPolicy.class);
when(mock.getRabatt(kunde)).thenReturn(10);
verify(mock).getRabatt(kunde);

// Fake
InMemoryDiscountRepository fake = new InMemoryDiscountRepository();
fake.add(new Discount(kunde, 10));

// Spy
DiscountPolicySpy spy = new DiscountPolicySpy();
service.berechneRabatt(kunde, artikel);
assertEquals(1, spy.getCallCount());

Preguntas Típicas de Examen (con Respuesta Breve)

  1. ¿Cuál es la diferencia entre Stub y Mock? Stub proporciona respuestas; Mock verifica las llamadas.
  2. ¿Cuándo usar un Fake? Cuando necesitas una simplificación funcional (p. ej., base de datos en memoria).
  3. ¿Qué hace un Spy? Registra las llamadas y permite verificaciones posteriores.

Referencias Principales

  1. https://martinfowler.com/articles/mocksArentStubs.html
  2. https://junit.org/junit5/docs/current/user-guide/
  3. https://testing.googleblog.com
Volver al blog
Share:

Entradas relacionadas