Indirekte Eingaben/Ausgaben
"Behavior verification": Benutzt das SUT (system under test) seine Abhängigkeiten korrekt?
Abhängigkeiten können komplexe Implementierungen haben oder (noch) gar nicht implementiert sein
Simulieren von externen Komponenten
Testen von Fehlersituationen (Paperjam, Datenbankverbindung abgebrochen, o.ä.)
- Dummy: Platzhalter innerhalb des Test-Setups
- Fake: Ersetzt eine Komponente (Service, Repository, etc.)
- Stubs: Rudimentäre Funktionalität --> Hard-Coded Rückgabewerte
- Spies: Flag wird bei Aufruf gesetzt
- Self-shunt
- Mocks: Konfigurierbare Test Doubles (z.B. per Reflection, etc.)
- Abwägen von Performance der Tests und Reflection, die Laufzeit benötigt
- Zahl der Mocks minimal halten
- Vor allem für Commands verwenden, nicht für Queries (z.B. Repositories)
- Mit Mocking über das Behaviour der Objekte lernen
- Ohne Implementierung der umgegebenen Objekte zu kennen
- --> Growing Object-Oriented Software, Guided by Tests
Martin Fowler: "Mocks Ain't Stubs"
Steve Freeman, Tim Mackinnon, Nat Pryce, Joe Walnes: "Mock Roles, Not Objects"
Steve Freeman, Nat Pryce: "Growing Object-Oriented Software, Guided by Tests"
Avdi Grimm: "Making a Mockery of TDD"
Frank Westphal: "Testgetriebene Entwicklung mit JUnit & FIT"