Donnerstag, 31. Oktober 2013

Dummy Object by Example

Das ist der zweite Teil der Serie über Test Doubles. Der erste Teil mit der Einführung von Test Doubles und dem Aufbau des Beispiels findet sich hier.

Dummy-Objekte dienen dazu, für den Unit-Test nicht interessierende, aber zwingend aufzubauende Abhängigkeiten zu vereinfachen. In dem Beispiel soll die Berechnung der Rechnungssumme getestet werden. Dass der Kunde eine Adresse haben muss, ist dabei nicht von Interesse. Deshalb soll ein Dummy-Kunde geschaffen werden, der ohne Adresse auskommt.

Die Erstellung der Adresse ist in dem Beispiel nicht weiter aufwändig. Aber es kann auch eine viel aufwändiger zu erstellende Abhängigkeit vorliegen. Und das Verfahren zur Eliminierung dieser Abhängigkeit bleibt dassselbe.

Damit der Kunde überhaupt mit einem Dummy ausgetauscht werden kann, muss zuerst ein Interface extrahiert werden.



Der reguläre Kunde Customer implementiert jetzt dieses Interface. Die Rechnung verwendet an Stelle des konkreten Objektes das neu geschaffene Interface.

Jetzt wird ein neues DummyCustomer-Objekt geschaffen, das ebenfalls das o.g. Interface implementiert. Aber dieser DummyCustomer erfordert keine Adresse.



Damit vereinfacht sich der Test, weil bei Verwendung des DummyCustomers kein Adress-Objekt mehr erstellt werden muss. Die Erzeugung des Dummy-Customers kann somit gleich ohne weiterführendes Setup beim Konstruktoraufruf der Rechnung erfolgen. Der Test wird übersichtlicher, die aufwändige Erstellung der nicht interessierenden Abhängigkeit verschwindet und die Verantworlichkeit des Tests erschließt sich auf einen Blick.



Man sieht, dass mit einem Dummy-Objekt nicht interessierende Abhängigkeiten eliminiert werden können. Im nächsten Artikel werden Stubs demonstriert. Stubs werden häufig mit den hier beschriebenen Dummies verwechselt. Die Unterschiede werden in dem nächsten Artikel klarer.

Keine Kommentare:

Kommentar veröffentlichen