Nachlese: Spock | Print |
Written by Michael Jastram   
Thursday, 09 February 2012 20:21
Igor Drobiazko

Das Spock-Framework macht Testen einfacher - das Verspricht Igor Drobiazko in diesem Vortrag. Dieses Thema hat 65 Besucher an die Heinrich-Heine Universität gelockt.

Wieso brauchen wir überhaupt ein neues Test-Framework? Denn davon gibt es schließlich viele. Allerdings unterscheiden sich viele dieser Frameworks nicht sonderlich, was die Features betrifft. Und wirklich elegant sind sie alle nicht. Hinter Spock steckt die Philosophie, dass Groovy zum einen vieles, das zum Testen notwendig ist, schon von Haus aus zur Verfügung stellt (z.B. sind keine Asserts notwendig), zum anderen lässt sich vieles wesentlich eleganter als in Java ausdrücken.

Eine Test-Klasse in Spock nennt sich "Specification" und besteht aus mehreren Teilen die durch Labels wie "when", "then", und weiteren voneinander getrennt sind. Der Clou ist, dass in der "then"-Sektion das steht, was erwartet wird, und zwar als Ausdruck. Um die max()-Methode zu testen, würde da also z.B. Math.max(1,3) == 3 stehen. Wenn nun ein Fehler auftauchen würde, würde Spock den Ausdruck ausdrucken und mit Labeln versehen, die die vorgefundenen Werte zeigt.

Als nächstes lernten wir mehrere Features kennen, die das Schreiben von Testen einfach angenehmer machen: Von Groovy-Features wie besserem Auto-Boxing und Typerkennung, bis hin zu Eingabetabellen für Tests, die den selben Test übersichtlich mit unterschiedlichen Parametern ausführen.

Doch am beeindruckensten sind die Fähigkeiten von Spock beim Mocking. Mit wenigen Zeilen Code werden Mock-Objekte erzeugt. Die Auswertung der Mockobjekte erfolgt dann im "then" block. Dabei können Wildcards, und sogar Closures eingesetzt werden. Insbesondere Closures lösen wesentlich eleganter, was Frameworks wie Mockito mit Captchas lösen.

Das Fazit: Auch für Entwickler, die sich (noch) nicht mit Groovy auskennen, konnen schnell gut lesbare Tests produziert werden. Der einzige Wermutstropfen ist, dass zur Zeit die Unterstützng von Spock in Eclipse noch nicht so ausgereift ist wie die in IntelliJ.

Auch diesmal haben wir wieder Spenden für die Elterninitative Kinderkrebsklinik gesammelt. Zusammen mit der Sammlung vom Januar-Vortrag haben wir €59,83 bekommen, und wir werden den Betrag wie immer verdoppeln und €120 überweisen.

Wie immer wurde beim Bier hinterher noch das eine oder andere Thema lange weiter diskutiert.