Test-Doubles
Beim Unit Testing werden Abhängigkeiten des zu testenden Objekts (DOC â Depended-On Component) durch Test-Doubles ersetzt, damit das Testobjekt isoliert geprĂźft werden kann. Dadurch wird verhindert, dass fehlende, fehlerhafte oder aufwendige Komponenten das Testergebnis beeinflussen.
Stub
Ein Stub ersetzt eine benĂśtigte Komponente durch ein Objekt mit gleichem Interface, das vorher festgelegte Reaktionen oder RĂźckgabewerte liefert.
Dient als indirekter Test-Input.
Keine Logik, nur fest definierte Antworten.
Spy
Ein Spy ist ein Stub, der zusätzlich alle Aufrufe und Daten protokolliert, die vom Testobjekt an ihn ßbergeben werden.
Erfasst indirekte Outputs des Testobjekts.
Wird fĂźr Diagnose oder Verifikation genutzt.
Mock
Ein Mock ist ein âintelligenteresâ Stub: Er nimmt Aufrufe entgegen, wertet sie aus und reagiert abhängig von Zulässigkeit und Korrektheit der Aufrufe.
Verifiziert das Verhalten des Testobjekts (z. B. ob eine Methode korrekt aufgerufen wurde).
Liefert bei Bedarf ebenfalls RĂźckgabewerte.
Fake
Ein Fake ersetzt eine reale Komponente durch eine vereinfachte, lauffähige Implementierung.
Hat funktionale Logik, aber einfacher umgesetzt.
Beispiel: In-Memory-Datenbank statt echter Datenbank.
Dummy
Ein Dummy ist ein leeres Objekt oder Nullobjekt, das nur aus syntaktischen GrĂźnden benĂśtigt wird.
Wird nicht ausgewertet.
Hat keinerlei Bedeutung fĂźr das Testergebnis.
Eigene Test-Doubles
Eigene Testdoubles werden häufig als Fake oder Stub umgesetzt. Voraussetzung dafßr ist meist ein Interface, das die Abhängigkeit beschreibt. Dieses Interface kann im Test durch eine eigene Implementierung ersetzt werden.
Der Vorteil eigener Testdoubles liegt darin, dass sie sehr verständlich sind und ohne zusätzliche Bibliotheken auskommen. Der Nachteil ist, dass sie bei vielen Tests viel zusätzlichen Code verursachen.
Moq-Framework
Moq ist ein Mocking-Framework fĂźr .NET, mit dem Testdoubles dynamisch zur Laufzeit erstellt werden. Es wird vor allem fĂźr Mocks verwendet, also Objekte, deren Verhalten gezielt konfiguriert und ĂźberprĂźft werden kann.
Nach der Installation des NuGet-Pakets Moq kann dasselbe Beispiel deutlich kompakter getestet werden:
Hier Ăźbernimmt Moq die Rolle des Testdoubles. Mit Setup wird festgelegt, wie sich das Objekt bei einem bestimmten Methodenaufruf verhalten soll. Ăber mock.Object erhält man das fertige Ersatzobjekt, das in die zu testende Klasse injiziert wird.
Ein grosser Vorteil von Moq ist, dass man zusätzlich ßberprßfen kann, ob Methoden aufgerufen wurden:
Damit wird sichergestellt, dass die Abhängigkeit tatsächlich verwendet wurde.
Zuletzt aktualisiert