30.11.2013

Rezension: JUnit-Profiwissen - Michael Tamm

JUnit-Profiwissen
Effizientes Arbeiten mit der Standardbibliothek für automatisierte Tests in Java
Michael Tamm
Verlag: dpunkt
Veröffentlicht: 16. Oktober 2013
Seiten: 370
ISBN: 978-3864900204

Inhalt

Los geht es mit einer 10 seitigen Einführung in das Thema Testen. Da erklärt der Autor kurz die Idee hinter automatisierten Tests.

Anschließend beschreibt Michael Tamm in den Kapiteln 2 und 3 die Versionen JUnit 3 und JUnit4. Dort werden auf etwa 80 Seiten die verschiedenen Funktionen von JUnit erklärt. Dabei werden nicht nur die Grundlagen von JUnit beschrieben, sondern es wird auch auf unbekanntere Annotationen, wie @Rule, @Theory und @Category eingegangen.

Kapitel 4 behandelt das Thema 'Testgetriebene Entwicklung'. In dem Kapitel erklärt Michael Tamm den TDD-Zyklus, d.h. die verschiedenen Schritte, die die testgetriebene Software-Entwicklung ausmachen. Außerdem stellt er die Verbindung zu ATDD her.

In Kapitel 5 wird die Assertion-Bibliothek Hamcrest vorgestellt. Es wir beschrieben, wie man Hamcrest in Projekte einbindet, wie Matcher verwendet werden und wie man eigene Matcher schreibt. Außerdem werden noch kurz die Bibliothek Fluent Assertions, die Teil von FEST ist, vorgestellt.

Kapitel 6 geht sehr ausführlich, auf knapp 70 Seiten, auf Mock-Objekte und verschiedene Mocking-Frameworks ein. Als erstes werden die verschiedenen 'Mock-Typen' gegeneinander abgegrenzt (Dummy, Pseudo, Fake, Stub, Mock, Spy). Anschließend erklärt Michael Tamm, wie man Mock-Objekte selbst erstellen kann. Danach geht er auf die Frameworks jMock, easyMock, Mockito und PowerMock ein.

In Kapitel 7 stellt Michael Tamm verschiedene Pattern vor, um gut verständliche Tests zu erstellen. Beispielsweise die Benennung von Testmethoden und den AAA-Stil (Arrange, Act, Assert). Außerdem erklärt er das 'Test Builder Pattern' und das 'Page Object Pattern'.

Auf die Reduzierung der Ausführungszeit von Tests geht Michael Tamm in Kapitel 8 ein. Dort beschreibt er verschiedenen Herangehensweisen, wie man seine Tests beschleunigen kann, so dass ein Build inklusive Tests nicht länger als 10 Minuten dauert.

Kapitel 9 beschäftigt sich mit Tests "abseits vom Happy Path'. Dabei wird beschrieben, wie man beispielsweise Exceptions testet, überprüft, ob Logmeldungen in der Logdatei landen oder ob ein System.out wirklich eine Ausgabe produziert hat.

Kapitel 10 behandelt nichtfunktionale Tests. Also Performance-, Stress-, Randomized- und Architektur-Tests. Dabei verrät Michael Tamm verschiedene Tricks und Kniffe, wie man solche Tests aufsetzt und was dabei zu beachten ist. Außerdem erwähnt er die Bibliotheken JDepend, PMD, FindBugs und JMeter.

Abschließend wird in den Kapiteln 11 bis 14 auf die verschiedenen Integrationen von JUnit in IDEs und andere Frameworks und Tools eingegangen. Also Eclipse, IntelliJ, Ant und Maven. Dabei wird auch die Integration von Tools, wie ECLEmma, Cobertura und JaCoco erklärt.

Fazit

Generell hat mir das Buch sehr gut gefallen. Man merkt sofort, dass der Autor zweifelsfrei sehr kompetent auf dem Gebiet ist und tief in der Materie drin steckt. Der Inhalt des Buches ist auch für Leute, die schon seit Jahren JUnit-Tests schreiben hilfreich. Man findet eine Reihe Anregungen und Tipps, die helfen, die eigenen Tests zu verbessern. Und auch für sehr erfahrene Tester dient es nochmal als Bestätigung, dass man nicht alles falsch macht und manche Codestellen nur mit verschiedenen Tricks zu testen sind.

Was mir nicht so gut gefallen hat, dass der Autor teilweise zu ausführlich war. Das Buch möchte Profiwissen vermitteln, aber es wird dann doch Seitenweise auf Grundlagen eingegangen. Man hätte sich oft viel kürzer fassen können, ohne das es einen Informationsverlust gegeben hätte. Ich denke, wenn man die vielen Füllwörter, Grundlagen und 'Geschichten' weggelassen hätte, dann wäre das Buch deutlich kompakter geworden.

Allerdings ergibt sich daraus widerum der Vorteil, dass sich die Kapitel 1 bis 4 des Buches auch für Einsteiger eignen. Die Grundlagen werden so ausführlich behandelt, dass auch ein JUnit-Neuling problemlos folgen kann.

Ein weiterer kleiner Kritikpunkt ist, dass oft auf die verschiedenen Versionen und die Geschichte von JUnit eingegangen wird. Das mag zwar interessant sein, aber den durchschnittlichen Leser interessiert es wahrscheinlich eher weniger, ob ein Feature ab der Version 4.7 oder erst ab Version 4.11 verfügbar ist.

Das soll aber nicht heißen, dass ich das Buch nicht weiterempfehlen würde. Ich habe beim Lesen eine Menge neuer Dinge kennengelernt, die mir trotz der Benutzung von JUnit über die letzten Jahre, noch nicht bekannt waren.

Wirklich klasse fand ich die Zusammenfassungen am Ende jeden Kapitels. Wenn man zu einem späteren Zeitpunkt den Inhalt des Buches nochmal überfliegen möchte, muss man einfach die Zusammenfassungen lesen und hat sofort wieder den Inhalten des Kapitels parat.

Was ich mir für die zweite Auflage wünsche, ist ein Kapitel über Arquillian.

Wer also ein deutsches Buch sucht, sollte sich JUnit-Profiwissen: Effizientes Arbeiten mit der Standardbibliothek für automatische Tests in Java auf alle Fälle mal ansehen.