Buch-Rezension zu „The Art of Unit Testing“

The Art of Unit Testing„The Art of Unit Testing“ von Roy Osherove ist im Mai 2009 bei Manning erschienen. Das Buch behandelt Unit Testing in C#.

 
Zum Inhalt
Kapitel 1 zeigt die Basis von Unit Tests. Diese umfasst eine Definition der Begriffe, eine kurze Einführung zu Test-Driven Development (TDD) und eine Abgrenzung gegen Integrationstests. Den nicht alles, was sicht Unit Test nennt, ist auch wirklich einer.

Kapitel 2 hilft einem durch den ersten Unit Test. Nach der Auflistung der Vorteile die ein entsprechendes Test-Framework bringen folgt ein Rundgang durch NUnit. Dieser reicht von der Installation über die Einrichtung eines Test-Projekts zu Namenskonventionen bis hin zur Ausführung der Tests.

Wie man mit Stubs die Abhängigkeiten aufbrechen kann wird in Kapitel 3 gezeigt. Das Beispielprojekt hat zu beginn eine direkte Abhängigkeit zum Dateisystem. In 2 Schritten wird der Code so umgebaut, dass die Abhängigkeit aufgelöst werden kann. Mit einer kleinen Hilfsklasse, dem Stub, kann man dann genau die Antwort zurück liefern, die man für den Test der Übergeordneten Klasse benötigt. Dies kann in dem Beispiel sowohl ein Boolean sein wie auch eine Exception des Dateisystems.
Es folgt ein Abstecher ins Thema Dependency Injection. Denn der Stub, aber auch die konkrete Klasse mit der Logik, muss ja mit der aufrufenden Klasse verbunden werden. Es werden die Vor- und Nachteile der jeweiligen Ansätze dargelegt, damit man selber das zu seinem Problem passende auswählen kann.

Kapitel 4 zeigt wie man mit Mock Objekten die Interaktion mit der zu testenden Klasse prüfen kann. Mit einem selbst geschriebenen Mock wird das Prinzip erklärt, bevor in Kapitel 5 das Mock-Framework Rhino Mocks erklärt wird. Eine Übersicht der anderen verbreiteten Frameworks (wie TypeMock, NMock und NUnit.Mocks) rundet das Kapitel ab.

Die Organisation von Tests, Test Patterns und Continuous Integration bilden das Kapitel 6, während Kapitel 7 die Qualität der Tests behandelt. Lesbarkeit und Verständlichkeit sind Dinge, die auch bei Tests bedacht werden müssen.

Kapitel 8 hilft bei der Integration von Unit Tests in die Firma. Hierbei geht es nicht um die technische, sondern um die organisatorische Ebene. Osherove berichtet über seine Erfahrungen und liefert Antworten zu häufig aufkommenden Fragen und Problemen.

Wie man mit Legacy Code arbeiten kann zeigt Kapitel 9. Grosse Projekte ohne wirkliche Unit Tests benötigen spezifische Vorgehensweise. Auch hier werden Vor- und Nachteile der Ansätze aufgezeigt. Der Einsatz von Tools kann einem auch hier das Leben erleichtern. Depender oder NDepend können Abhängigkeiten anzuzeigen, was als Ausgangslage für Unit Tests dienen kann. Für Java Entwickler werden die Tools JMockit (vergleichbar mit TypeMock) und Vise erwähnt.

Design und Testbarkeit werden noch einmal ausführlich im Anhang A behandelt. Anhang B bietet eine kompakte Auflistung von Tools und Frameworks aus allen Bereichen von Tests.

 
Fazit
Ein sehr gutes Buch zur Kunst des Unit Testings. Auf rund 300 Seiten erfährt man unzählige Möglichkeiten zum sauberen testen. Das Buch richtet sich eher an Leser mit Erfahrungen im Bereich Unit Testing. Für Anfänger mag sich nicht immer erschliessen, worin die Vorteile der jeweiligen Ansätze liegen. Hat man sich aber mit den Problemen selber herumgeschlagen, braucht es nicht mehr viele Worte. Ich fand das Buch eine ideale Ergänzung zu Test Driven.
Der Anhang A hätte ein eigenes, „richtiges“ Kapitel verdient und einige Grafiken hätte man nochmals überarbeiten können. Davon abgesehen ist das Buch sehr gut.

 
Zum Buch
The Art of Unit Testing with Examples in .NET von Roy Osherove, 2009 Manning, ISBN 978-1-933988-27-6, 320 Seiten