Donnerstag, 14. November 2013

Test Spy by Example

Test Spies nehmen eine gewisse Sonderrolle bei den Test Doubles ein, weil sie die Tests weder vereinfachen noch spezielle Voraussetzungen schaffen. Ihr Zweck ist es, Verhalten zu testen. Alle bisherigen Tests haben ausschließlich den Zustand nach der Berechnung überprüft, also ob die Rechnungssumme stimmt. Mit einem Test Spy kann indirekt überprüft werden, ob eine Methode wie erwartet aufgerufen wurde (und ggf. wie oft). Ein Beispiel hierfür wäre z.B. die Überprüfung des automatischen Versands einer eMail nach einer Nutzerregistrierung.

Eine Verhaltensverifikation kann auch mit einigen Mock-Frameworks, wie z.B. Mockito erreicht werden. Aber das wird erst im kommenden Artikel dargestellt. In diesem Artikel ist noch gute alte Handarbeit angesagt. Dazu wird unser Beispiel erweitert. Beim Hinzufügen einer Rechnungsposition zur Rechnung wird automatisch ein Warenwirtschaftssystem über den Abgang der Produktmenge informiert.

Dazu muss der Rechnung das anzusprechende Warenwirtschaftssystem mitgeteilt werden. Der Einfachheit halber wird der Konstruktor von Invoice entsprechend erweitert. Natürlich könnte man das auch mittles Setter-Injekction lösen, aber das soll hier gar nicht untersucht werden.



Der Test Spy implementiert das Interface IRessourcePlanning und erweitert es um die willkürlich gewählten Methoden "wasRemoveCalled()" und "getCallCount()". Natürlich sind auch andere Erweiterungen denkbar.



Die nicht aus dem Interface überschriebenen Methoden zeichnen die Aufrufe der Interface-Methode zur späteren Verifikation auf.



Die Erweiterungen des Test Spy gegenüber dem Interface hat zur Folge, dass im Test das Spy-Objekt nicht mit dem Interface als Typ instanziert werden kann, denn sonst stehen die im Interface unbekannten Methoden für die Verifikation nicht zur Verfügung.



Jetzt kann geprüft werden, ob die korrekte Anzahl von removeFromStock() Aufrufen auf dem IResourcePlaning Kollaborator erfolgt ist. Somit sieht man wie indirekte Interaktionen mittels Test Spies überprüft werden kann. Im vorerst letzten Teil dieser Reihe wird der Einsatz von Mock-Objekten demonstriert.

Keine Kommentare:

Kommentar veröffentlichen