Skip to content
IRC-Coding IRC-Coding
Testdoubles Stub Mock Fake Spy Unit Tests

Testdoubles einfach erklärt: Stubs, Mocks, Fakes & Spys – wann was verwenden?

Testdoubles: Stubs (vordefinierte Antworten), Mocks (Erwartungen prüfen), Fakes (vereinfachte Implementierungen), Spys (Aufzeichnungen). Mit Beispielen, Einsatzregeln und Prüfungsfragen.

S

schutzgeist

2 min read

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

Dieser Beitrag ist eine Begriffserklärung zu Testdoubles – inklusive Prüfungsfragen und Tags.

In a Nutshell

  • Stub: liefert vordefinierte Antworten
  • Mock: prüft Interaktionen (Erwartungen)
  • Fake: vereinfachte, funktionale Implementierung
  • Spy: zeichnet Aufrufe mit auf (kombiniert Stub + Mock)

Kompakte Fachbeschreibung

Stub

Gibt feste Antworten zurück, ohne Verhalten zu prüfen. Gut für Zustandslose Tests.

Mock

Überprüft, ob bestimmte Methoden mit bestimmten Parametern aufgerufen werden. Nützlich, wenn Interaktionen kritisch sind.

Fake

Arbeitende, aber vereinfachte Implementierung (z.B. In‑Memory‑DB). Gut für Integration‑ähnliche Unit‑Tests.

Spy

Speichert Aufrufe und ermöglicht später Prüfungen (Hybrid aus Stub und Mock).

Prüfungsrelevante Stichpunkte

  • Stub: Antworten vordefinieren, keine Verhaltensprüfung
  • Mock: Erwartungen definieren und verifizieren
  • Fake: Funktionale Vereinfachung (z.B. In‑Memory‑Repo)
  • Spy: Aufrufe aufzeichnen, später prüfen
  • Einsatzregeln: Stub für Zustand, Mock für Verhalten, Fake für Komplexität
  • Frameworks: Mockito, unittest.mock, Jest

Kernkomponenten

  1. Stub (Antworten)
  2. Mock (Erwartungen)
  3. Fake (vereinfachte Implementierung)
  4. Spy (Aufzeichnung)
  5. Testisolation
  6. Framework‑Nutzung
  7. Setup/Teardown
  8. Assertions
  9. Verifikation
  10. Wartung

Praxisbeispiel (Rabattservice)

// Stub
DiscountPolicy stub = new DiscountPolicyStub(10); // immer 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());

Typische Prüfungsfragen (mit Kurzantwort)

  1. Unterschied Stub vs. Mock? Stub liefert Antworten; Mock prüft Aufrufe.
  2. Wann Fake verwenden? Wenn eine funktionale Vereinfachung nötig ist (z.B. In‑Memory‑DB).
  3. Was macht ein Spy? Zeichnet Aufrufe auf und erlaubt später Prüfungen.

Wichtigste Quellen

  1. https://martinfowler.com/articles/mocksArentStubs.html
  2. https://junit.org/junit5/docs/current/user-guide/
  3. https://testing.googleblog.com
Zurück zum Blog
Share:

Ähnliche Beiträge