cloneTest-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.

chevron-rightStubhashtag

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.

chevron-rightSpyhashtag

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.

chevron-rightMockhashtag

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.

chevron-rightFakehashtag

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.

chevron-rightDummyhashtag

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