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.

Last updated