Ein kompaktes, in handliche Rezepte unterteiltes Nachschlagewert
mit Tipps aus der Profi-Praxis zum Thema JUnit und zu automatisierten
Software-Tests. Die vielen Rezepte werden durch Antipatterns - das sind
falsche oder suboptimale Lösungswege - abgerundet.
Das Buch behandelt viele Themen rund um den
erfolgreichen Test von Software, darunter auch
Ausgangssituation war die jahrelange Beschäftigung mit
dem Thema Unit Tests, insbesondere mit Java und JUnit. Die vielen
Erfahrungen, die ich während mehrerer umfangreicher Software-Projekte auf
diesem Gebiet gesammelt habe, waren Anlass für das Buch. Ein Open-Source
Projekt verhalf mir zu weiteren Einsichten: Die daran freiwillig
Mitwirkenden waren teils gute bis sehr gute Entwickler und Experten auf
ihrem Fachgebiet (etwa in der Biologie). Dennoch wurden viele Unit Tests
nur suboptimal oder entgegen der Philosophie von JUnit erstellt. Das
führte mit der Zeit zu entarteten Testfällen, die größtenteils
umgestrickt werden mussten. Das Buch JUnit Profi-Tipps vermittelt
Wissen und Hinweise und hilft so beim Planen und Erstellen optimaler Unit Tests
mit JUnit. Aus einer Idee wurde ein Projekt. Nun ist es gereift und
hat mir viel Freude bereitet.
|
Vorwort
|
|
| 1 |
Einleitung |
| 1.1 |
Unit Tests und weitere Spielarten |
| 1.2 |
Nutzen von Unit Tests |
| 1.3 |
Aufbau des Buchs |
| 1.4 |
Die Icons in diesem Buch |
| 2 |
Grundlagen |
| 2.1 |
Grundlegende Begriffe |
|
Testkörper und Testklasse |
|
Testfall |
|
Unit Test |
|
JUnit kompakt |
|
assert- und fail-Methoden |
|
Annotationen |
| 2.2 |
Zeitpunkt der Erstellung von Testfällen |
|
Konventionelle Herangehensweise |
|
Testgetriebene Entwicklung |
|
Temporäre Testfälle |
| 2.3 |
Der Software-Entwicklungsprozess |
| 3 |
Erstellung von Unit Tests |
| 3.1 |
Benennen von Testklassen |
| 3.2 |
Benennen von Testmethoden |
| 3.3 |
Konsolenausgaben in Testfällen |
| 3.4 |
Implementieren eigener Basistestklassen |
| 3.5 |
Testsuiten |
| 3.6 |
Verzeichnisstruktur in Projekten |
| 3.7 |
Virale Lizenzen |
| 3.8 |
Enterprise Java Beans (EJBs). |
| 4 |
Automatisches Generieren von Unit Tests |
| 5 |
Schreiben von Testlogik |
| 5.1 |
Testen von Rückgabewerten |
| 5.2 |
Ausnahmen (Exceptions). |
| 5.3 |
Abstrakte Klassen |
| 5.4 |
Testen privater Methoden und Felder. |
| 5.5 |
Testen auf Serialisierbarkeit |
| 5.6 |
Threads testen (Ergänzung
zum Buch) |
| 5.7 |
Zufallszahlen-abhängige Logik |
| 5.8 |
Testen besonderer Methoden |
| 6 |
Analyse von Quelltext |
| 6.1 |
Verdächtiger Code und Fehler in Unit Tests |
| 7 |
Code Coverage / Test Coverage |
| 8 |
Performanz- und Lasttests |
| 9 |
Entwurfsmuster |
| 9.1 |
Erzeugungsmuster |
|
Singleton (Buchauszug
online) |
|
Factory Method |
| 9.2 |
Verhaltensmuster |
|
Template Method und Strategy. |
|
Observer |
|
Iterator (Buchauszug
online) |
| 9.3 |
Strukturmuster. |
|
Proxy |
| 10 |
Graphische Benutzeroberflächen |
| 11 |
JUnit 4 (Ergänzung zum Buch) |
| 12 |
Schlusswort |
| 13 |
Ressourcen |
| 13.1 |
Unit Tests. |
| 13.2 |
Performanz- und Lasttests |
| 13.3 |
Testen von Benutzeroberflächen |
| 13.4 |
Analysieren von Quelltext |
| 13.5 |
Erstellen von Testfällen |
| 13.6 |
Code Coverage / Test Coverage |
| 13.7 |
Testen von Webanwendungen |
| 13.8 |
Beispielprojekte |
| 13.9 |
Sonstiges |
| 13.10 |
Literaturempfehlungen |
|
Testen von Software |
|
Entwurfsmuster |
|
| Verzeichnis der Rezepte |
| Verzeichnis der Antipatterns |
| Index |
| |
-
Jede Testklasse erbt von TestCase
-
Überschreiben der Methode runTest()
-
Zeitpunkt der Testfallerstellung
-
Benennen von Testklassen
-
Benennen von Testmethoden
-
Vermeiden von Konsolenausgaben
-
Abstrakte Testklassen einführen
-
Testklassen gruppieren
-
(De-)Initialisierung in Testklassen
-
Annotationen für Tests verwenden
-
Globale (De-)Initialisierung mit TestSetup
-
Globale (De-)Initialisierung mit Hilfe statischer
Blöcke
-
Fehlgeschlagene Initialisierung in setUp()
behandeln
-
Pro Package eine umfassende Suite
-
Testsuiten mit JUnit-Addons zusammenstellen
-
Testsuiten mit RMock zusammenstellen
-
Testsuite mit GSBase zusammenstellen
-
Konfigurierbare Testsuiten
-
Eine allumfassende Testsuite namens AllTests
-
Ablage von Tests, Testdaten und Geschäftslogik
-
Tests für lizensierte Bibliotheken auslagern
-
EJB-Code mit ServerTestCase testen
-
EJB-Code mit MockEJB testen
-
Generieren von Testfällen mit JUnitDoclet
-
Generieren von Testfällen mit NetBeans
-
Generieren von Testfällen mit Eclipse
-
Generieren von Testfällen mit JBuilder
-
Testen von Typen auf Gleichheit
-
Testen auf korrekte Inhalte einer Liste
-
Vergleichen von Arrays
-
Testen auf korrekte Inhalte einer Map
-
Testen von Ausnahmen
-
Ausnahmen testen: Variationen im catch-Block
-
Von erwarteter Exception abgeleitete Exceptions
-
Ausnahmen mit bestimmtem Meldungstext
-
Testen abstrakter Klassen
-
Private Methoden per Reflection testen
-
Private Felder per Reflection testen
-
Testen der Serialisierbarkeit einer Klasse
-
Threads mit GroboUtils testen
-
Thread-Dumps auswerten
-
Zufallsgenerator-abhängige Logik testen
-
Die Methode equals(Object) implementieren und testen
-
Die Methode hashCode() implementieren und testen
-
Die Methode toString() testen
-
Die Methode clone() testen
-
Quelltext mit JCSC prüfen
-
Programmanalyse mit JLint
-
Konventionen mit Checkstyle prüfen
-
Spezielle Konfiguration von Checkstyle für Unit Tests
-
Dateizugriffe mit Ashcroft prüfen
-
Konventionen mit PMD prüfen
-
PMD-Prüfungen deaktivieren
-
Konventionen mit FindBugs prüfen
-
Testbedarf mit EMMA ermitteln
-
Code Coverage mit JCoverage ermitteln
-
Unvollständige Tests mit Jester finden
-
Performanztests mit JUnitPerf
-
Lasttests mit JUnitPerf
-
Speicherverbrauch testen mit SimpleProfiler
-
Das Entwurfsmuster Singleton testen (Buchauszug
online)
-
Thread-sichere Singleton-Version testen
-
Das Entwurfsmuster Factory Method testen
-
Das Entwurfsmuster Template Method testen
-
Das Entwurfsmuster Observer testen
-
Das Entwurfsmuster Iterator testen (Buchauszug
online)
-
Das Entwurfsmuster Proxy testen
-
Simulation einer Tastatureingabe
-
Komponenten mit jfcUnit testen
-
Swing-Komponenten mit Jemmy testen
-
Simulation eines Endanwenders mit Jacareto
-
Testfälle mit JUnit 4 erstellen
-
Ignorieren von Testfällen mit JUnit 4
-
Testen von erwarteten Ausnahmen mit JUnit 4
-
Timeouts in JUnit 4-Testfällen
-
Parametrisierbare Testfälle
-
(De-)Initialisierungen mit JUnit 4
-
Ausführen von Tests mit JUnit 4
-
Testsuiten mit JUnit 4 definieren
-
Testfälle aus JUnit 3 mit JUnit 4 ausführen