Michael's book list

Michael's book list

The Art of Unit Testing

(2014-02-14)

Unit Testing wird in zahlreichen Projekten als wesentliches Hilfsmittel der Softwareentwicklung genutzt. Und in vielen anderen Projekten ist die imminente Bedeutung von Tests bekannt, erfolgt jedoch nicht zum Entwicklungszeitpunkt, sondern nachgelagert. Für bestimmte Testarten ist dies richtig und auch nicht anders möglich, man denke hier an Integrations- oder Abnahmetests. Doch sollte auf technischer Ebene bereits seitens des Entwicklers möglichst viel getestet werden, oder gar Testgetrieben entwickelt werden. Dafür sind Unit-Tests da. Technisch einfach einsetzbar, muss doch „nur“ für das zu testende Stück Code ein Test erstellt werden. Dennoch tut sich so mancher Entwickler schwer mit dem Thema und setzt Unit-Tests wider besseren Wissens nur unzureichend oder gar nicht ein. Denn einen guten Unit-Test zu schreiben oder ihn richtig im Rahmen der Entwicklung einzusetzen, ist oft schwerer als gedacht.

Genau hier setzt das vorliegende Buch an. Es geht nicht darum, ein Testframework zu erläutern und all dessen Möglichkeiten zu beschreiben, wie dies in anderen Büchern der Fall ist. Vielmehr geht es darum, den Leser für Unit-Tests zu sensibilisieren, zu zeigen, wie und wo sie eingesetzt werden. Insbesondere gehört dazu, nicht nur einen Test zu schreiben, sondern die produktive Software so zu gestalten, dass diese testbar wird. Dies ist ein Grundlagenthema, unabhängig von der genutzten Programmiersprache. Wenn auch Roy Osherove seine Bespiele in C# erstellt, so ist dies Buch von Personen, die in anderen Sprachen beheimatet sind zu nutzen. Wenn es um konkrete Werkzeuge geht, nennt der Autor zwar meist solche aus der .NET-Welt, verlässt diese aber auch hier und da.

Und so erläutert der Autor das Wesen von Unit-Tests und Kerntechniken. Insbesondere geht es häufig darum, den zu testenden Code zu isolieren. Welche Vorbereitungen erforderlich sind und wie dann konkrete Objekte durch Fakes (Stubs, Mocks) ersetzt werden, zeigt Osherove anhand kurzer Codebeispiele. Erst nachdem er dem Leser die grundsätzlichen Techniken anhand eigenen Codes gezeigt hat, geht er auf Frameworks ein, die dem Entwickler eine solche Funktionalität liefern. Eine seiner Aussagen lautet: Lieber auch mal ein Objekt durch eigenen Fake-Code ersetzen, als allzu oft und gedankenlos ein Mockframework einzusetzen. Diese haben sehr wohl ihre Daseinsberechtigung, aber bitte nicht um ihrer selbst willen.

Der Autor stellt verschiedene Test- und Mockframeworks vor, um dem Leser eine Auswahl und Übersicht zu bieten, konzentriert sich mit seinen Beispielen aber auf wenige. Schließlich geht es um Grundlagen. Und zu denen gehört nicht nur die Erstellung von lesbarem und testbaren Produktivcode auch lesbarer Testcode. Und so widmet er sich auch ausführlich dem Design von Testcode sowie der Einführung von Unit Testing im Unternehmen. Dabei muss es nicht gleich Testdriven Development (TDD) sein. Auch wenn der Autor dies grundsätzlich befürwortet, so ist für ihn ein Test, der unmittelbar nach Programmierung des Produktivcodes erstellt wird, ähnlich wertvoll. Und wenn es um gar eine bestehende Codebasis geht, so muss jeglicher Unit-Test im Rahmen der Wartung lange nach Entwicklung der Software erstellt werden. Hierfür zeigt der Autor Entwicklungspfade auf.

Die Fülle der Themen kann hier nur kurz angerissen werden. Dem Autor ist es gelungen, die Grundlagen des Unit-Testings in ausreichender Breite darzustellen und zu zeigen, wie diese eingesetzt werden. Damit sollte so manch zögerlichem Entwickler der Weg in dieses wichtige Thema gebahnt werden.

Wenn auch der Autor seine Beispiele im Wesentlichen auf C# mit NUnit als Testframework, teilweise zuzüglich Stubs und Mocks beschränkt, so gibt die kurze Beschreibung diverser Framworks dem Leser dennoch einen Startpunkt zur Auswahl des geeigneten Tools an die Hand, für .NET ausführlicher als für Java oder sonstiges.

Insgesamt ein lohnendes Buch für jeden, der Unit-Testing einsetzen möchte, sich aber noch ein wenig schwer mit der Umsetzung tut. Und für viele Entwickler, die Unit-Testing bereits einsetzen, eine Reflektion über Sinn und Unsinn des Testens.


Title

The Art of Unit Testing

Subtitle with examples in C#
Author(s) Roy Osherove
Publisher, Year Manning, 2013
Language English
ISBN 978-1-6172-9089-3