Ich bin jetzt schon seit Jahren Java Entwickler. Dabei startete ich im Java EE Bereich. Von da ging es ziemlich schnell zum Springframework, was im Vergleich zum Standard einen wirklich sehr leichtgewichtigen Ansatz verfolgt. Trotzdem kann ich mit Sicherheit sagen, ich habe schon mehr XML-Konfigurationsdateien geschrieben als mir lieb ist.

Mit Ruby on Rails, Grails und teilweise dem Springframework ist dazu eine eindeutige Gegenbewegung, mit dem Motto “Konvention vor Konfiguration”, entstanden. Für mich begann damit die Zeit, in der ich mit verschiedenen dynamischen Programmiersprachen und ihren Frameworks experimentierte. In meinem beruflichen Umfeld konnte ich dieses Konzept nicht wirklich zum Einsatz bringen. Die bereits bestehenden Anwendungen wirken dabei wie ein Anker der, ab einer gewissen Anzahl von Anwendungen, nicht mehr gehoben werden kann.

Begeisterung für dynamische Programmiersprachen

Die Zeit mit den unterschiedlichen Programmiersprachen war jedoch nicht umsonst. Viele Verbesserungen, in meiner Art, Programme zu schreiben wurden dadurch möglich. Einige der dort vorhanden Konzepte konnte ich auch in die tägliche Arbeit integrieren. Auch die Begeisterung für dynamische Programmiersprachen ist geblieben.

Groovy und Spock

Vor kurzen wurde ich durch einen Podcast auf das Spezifikationsframewok “Spock” aufmerksam, welches mit Groovy auf der JVM ausgeführt werden kann.
Mit diesem Test-Framework können Code-Spezifikationen erstellt werden. Spock bedient sich dabei einer eigenen Domain Specific Language(DSL), die eine sehr übersichtliche Spezifizierung von erwarteten Verhalten ermöglicht. Vor allem möchte ich damit Spezifikationen für Java-Klassen erstellen können. Als Test habe ich einige Spezifikationen gegen die JodaTime-Library erstellt. Dabei bin ich den Anweisungen auf der GettingStarted-Seite gefolgt.

ACHTUNG: Groovy 1.8.6 muss installiert sein. Keine andere Version von Groovy wird unterstützt.

Es findet sich leider keine Anleitung für die Verwendung von Maven 3, welches beim aktuellen NetBeans-IDE mit installiert ist. Nach der Entfernung des Spock-Plugins und der Umbenennung der Testklasse von “NameSpock.groovy” auf “NameTest.groovy” wurde der Testfall richtig erkannt und wie erwartet ausgeführt.

Spock Blocks

Das Hauptkonzept von Spock ist es, die einzelnen zu spezifizierenden Funktionen in Blöcke zu gruppieren. Dieses können miteinander kombiniert werden, auch können mehrere Codezeilen zu einem Block gehören.

Hier ein Übersicht aus der Spock-Wiki Seite.

Quelle SpockBasics

Das Dreamteam der Blockpaare ist:

when: // beinhält einen Methodenaufruf
then: // hier wird ein erwarteter Zustand des Objektes überprüft

Soll auf mehrere Werte geprüft werden, erfolgt dass mit einer

expect: // Methodenaufruf mit Ergebnisvergleich
where: // Angeabe von Parametern

Kombination.

Mocking

Das Spock-Framework verfügt auch über ein eigenes Framework für die Erstellung von Mocks. Die dort gebotenen Funktionen habe ich noch nicht ausprobiert, die Syntax ist jedoch einfach und sollte für die meisten Fälle ausreichend sein. Ein detailliertes Beispiel habe ich auf dieser Seite gefunden.

RSpec vs Spock

Grundsätzlich fühlt sich Groovy von der Syntax ähnlicher zu Java an als Ruby. Ruby verfügt aber ebenfalls über ein sehr gutes Tool zur Spezifizierung “RSpec”. Mittels JRuby lässt sich dieses auch nutzen. Schon vor einigen Jahren hat es mehrere Versuche gegeben, Werkzeuge aus der Ruby-Welt für Java nutzbar zu machen: