Unit-Testen mit Groovy - so macht Qualitätssicherung wirklich Spaß
Matthias Merdes
Dieser Vortrag steht als PDF-Dokument zur Verfügung.
Seit Kent Beck und Erich Gamma JUnit entwickelt haben, hat sich Entwickler-Testen von einer traditionell ungeliebten Tätigkeit zu einer etablierten Praxis entwickelt. Kent Beck behauptete sogar, dass Entwickler seit JUnit Testen lieben würden. Während die Bedeutung von Unit-Tests besonders in agilen Entwicklungsmethoden betont wird, so ist der Beitrag solcher Tests zur Qualitätsteigerung von Software auch in anderen Entwicklungsansätzen wenig umstritten.
Von besonderer Wichtigkeit beim Unit-Testen ist es, dass tatsächlich nur eine 'Unit' getestet wird und kein Integrationstest größerer Objektbäume durchgeführt wird. Dies wird durch die Verwendung von Mock-Frameworks wie jMock und EasyMock deutlich erleichtert. Ohne derartige Frameworks ist das Unit-Testen einzelner Einheiten sehr aufwändig. Nichtsdestotrotz bleibt mit den Sprachmitteln von Java ein nicht zu unterschätzender Aufwand.
Häufig wird betont, dass in dynamisch typisierten Sprachen dem Unit-Testen eine noch größere Bedeutung zukommt. Während dies natürlich korrekt ist, so ist aber auch folgende Aussage wahr:
Unit-Testen ist in dynamisch typisierten Programmiersprachen weitaus einfacher und eleganter. Dies zeigen wir am Beispiel von Groovy, einer dynamisch objektorientierten Programmiersprache auf Basis von Java. Dabei kommen neben der dynamischen Typisierung sowohl die erweiterten Sprachmittel insbesondere im Bereich der Metaprogrammierung zum Tragen als auch Erweiterungen der entsprechenden Bibliotheken.
Im Einzelnen gehen wir auf folgende Themen ein:
- GroovyTestCase mit zusätzlichen assert-Möglichkeiten und besserer Testbarkeit für Exceptions
- einfaches Mocking durch Hashmaps, Expandos und dynamisch implementierte Interfaces
- die Verwendung der GDK-Klassen MockFor und StubFor
- Einführen neuer Mock-Methoden in vorhandene Klassen mit Hilfe der ExpandoMetaClass
- Austausch existierender Methoden durch Verwendung von Groovy-Kategorien
- Verwendung Groovy-spezifischer MockFrameworks wie z.B. gMock
Da Groovy auf Java basiert und auf der JVM ausgeführt wird, kann man die Vorteile von Groovy Unit-Tests auch in Projekten abschöpfen, deren Produktionscode teilweise oder vollständig in Java geschrieben ist. Abschließend lässt sich sagen, dass mit den beschriebenen Sprachmitteln und Erweiterungen von Groovy Unit-Testen stark vereinfacht und deutlich produktiver wird. Dies trägt in Kombination mit der Ausdruckskraft und Eleganz von Groovy dazu bei, dass Testen tatsächlich (noch mehr) Spaß macht.
Referenzen
- JUnit Homepage: http://www.junit.org/
- Groovy Homepage: http://groovy.codehaus.org/
- Testen mit Groovy: http://groovy.codehaus.org/Testing+Guide
Der Referent:
Matthias Merdes arbeitet als Senior Developer bei Heidelberg mobil International, einem Hersteller
mobiler Informationsportale, vor allem in den Bereichen Systemarchitektur, Serviceintegration und
Quality Engineering. Er war als Reviewer für 'Software: Practice and Experience' und das 'IBM
Systems Journal' tätig, hat in den Bereichen Softwareengineering und Geoinformatik publiziert und auf
Entwicklerkonferenzen vorgetragen.
Nach 10 Jahren Javaprogrammierung entwickelt er seit einigen Jahren fast ausschließlich in Groovy.
