Vorwort | 6 |
Inhalt | 7 |
1 Einleitung | 11 |
1.1 Die Softwarekrise | 13 |
1.2 Motivation für Softwaretests | 15 |
1.2.1 Vor- und Nachteile | 16 |
1.2.2 Varianten in der Namensgebung für Tests | 17 |
1.2.3 Methodik: Wie kommen die Tests zustande? | 19 |
1.2.4 Mathematik | 20 |
1.3 Python | 23 |
1.3.1 Schreibstil | 24 |
1.3.2 Verzeichnisstruktur | 26 |
1.3.3 Versionierung | 27 |
1.3.4 Versionskontrollsysteme | 28 |
1.3.5 Klinisch reine Umgebung | 29 |
1.3.6 Dokumentation | 30 |
1.3.7 Projektschnellstart | 35 |
1.4 Interview: Dr. Mike Müller | 36 |
2 Doctest | 41 |
2.1 Definition: Docstring | 41 |
2.2 Einfaches Beispiel | 42 |
2.3 Der Interpreter | 43 |
2.4 Eine Python-Datei | 44 |
2.5 Dokumentierte Python-Datei | 47 |
2.6 Tricks und Kniffe | 52 |
2.6.1 Leerzeichen verbessern die Lesbarkeit | 52 |
2.6.2 Variable Ergebnisse | 53 |
2.6.3 Eine leere Zeile | 54 |
2.6.4 Ausnahmebehandlung | 56 |
2.6.5 Ausnahmebehandlung mit Details | 58 |
2.6.6 Direkter Aufruf | 59 |
2.6.7 Einen Test auslassen | 61 |
2.7 Automatische Dokumentation | 61 |
2.8 Interview: Dr. Stefan Schwarzer | 62 |
3 Unittests machen Freude | 67 |
3.1 Begriffe | 68 |
3.1.1 Testfall | 68 |
3.1.2 Testvorrichtung, test fixture | 69 |
3.1.3 Testgruppe | 70 |
3.1.4 Teststarter | 70 |
3.1.5 Teststarter im Python-Modul | 71 |
3.2 unittest Modul auf der Kommandozeile | 72 |
3.2.1 Optionale Argumente | 72 |
3.2.2 unittest in der Kommandozeile | 73 |
3.2.3 Ablaufvereinfachung mit nosetests | 73 |
3.2.4 Akzeptanz erwünscht | 75 |
3.2.5 Fallunterscheidung | 77 |
3.2.6 Ausnahmebehandlung | 79 |
3.2.7 Vergleichsmöglichkeiten im Testfall | 83 |
3.2.8 Assertions | 83 |
3.2.9 Tests auslassen | 85 |
3.3 Erweiterungen | 87 |
3.3.1 Fixtures | 87 |
3.3.2 Testabdeckung | 88 |
3.3.3 Testabdeckung als HTML-Ausgabe | 90 |
3.4 Vortäuschen falscher Tatsachen | 92 |
3.4.1 Mock als Dekorator | 92 |
3.4.2 Mock im Zusammenhang mit Kontextmanagern | 92 |
3.4.3 Mock und die Nutzung im Testfall | 94 |
3.4.4 Lern- und Spielwiese | 95 |
3.5 Fingerübung I: Testgetriebene Entwicklung | 96 |
3.5.1 Erster Testcode | 97 |
3.5.2 Gültige Eingaben | 99 |
3.5.3 Ungültige Eingaben | 102 |
3.5.4 Tests erfolgreich? | 105 |
3.5.5 Vollständige Testabdeckung? | 107 |
3.6 Interview: Christian Theune | 108 |
4 Nose | 111 |
4.1 Hilfestellung | 111 |
4.2 Konfiguration | 112 |
4.3 Plugins | 113 |
4.3.1 Plugin Beispiel: Test-Laufzeiten ermitteln | 113 |
4.3.2 Plugin Integration in nosetests | 122 |
4.3.3 Nur ein getestetes Plugin ist ein gutes Plugin | 124 |
4.4 Interview: Stefan Hagen | 125 |
5 pytest | 127 |
5.1 Hilfestellung | 127 |
5.2 Konfiguration | 130 |
5.2.1 Markierungen | 131 |
5.2.2 Testvorrichtungen | 138 |
5.3 Testbeispiele | 142 |
5.3.1 Aussagekräftige Fehlermeldungen | 144 |
5.3.2 Ausnahmebehandlung | 146 |
5.3.3 py.test mit unittests | 150 |
5.4 Plugins | 151 |
5.4.1 Plugin Beispiel: Bericht als csv-Datei erzeugen | 152 |
5.4.2 Plugin Integration in py.test | 156 |
5.4.3 Nur ein getestetes Plugin ist ein gutes Plugin | 158 |
5.4.4 Die Benutzung des neuen Plugins | 166 |
5.5 Fingerübung II: sign(x), csign(z) | 169 |
5.5.1 Teilung vor der Erweiterung | 170 |
5.5.2 Signum für komplexe Zahlen | 171 |
5.5.3 Der erste Testfall | 173 |
5.5.4 Ungültige Eingabewerte | 174 |
5.5.5 Doctests mit py.test | 176 |
5.6 Interview: Holger Krekel | 178 |
6 tox | 180 |
6.1 Einstellungen | 180 |
6.2 Ein Beispiel | 181 |
6.3 Ein Testlauf | 183 |
6.4 Interview: Bastian Ballmann | 188 |
7 GUI Tests | 191 |
7.1 PyQt4 | 191 |
7.1.1 Beispiel GUI | 191 |
7.1.2 GUI Ansicht | 194 |
7.1.3 GUI Test | 194 |
7.1.4 Testabdeckung | 195 |
7.2 Django: Testgetriebene Webentwicklung | 196 |
7.2.1 Unittests und Funktionale Tests | 197 |
7.2.2 Django Start | 200 |
7.2.3 Django Entwicklungsserver | 202 |
7.2.4 Eine Kurzgeschichte | 204 |
7.2.5 Django Unittests | 207 |
7.2.6 Unittest für eine View | 211 |
7.2.7 View aus der Vorlage | 214 |
7.2.8 Wo bleiben die Daten? | 221 |
7.2.9 ORM und Persistenz | 222 |
7.3 Interview: Guido Günther | 229 |
8 Großes Python-Kino | 231 |
8.1 SaltStack | 231 |
8.1.1 Quellen und Unittests | 232 |
8.1.2 Integrationstests | 234 |
8.1.3 Dokumentation | 236 |
8.2 OpenStack | 236 |
8.2.1 Dokumentation, der Schlüssel zur Wolke | 237 |
8.2.2 Keystone Tests | 239 |
8.3 Interview: Julien Danjou | 241 |
Anhang | 245 |
Abbildungsverzeichnis | 245 |
Literaturhinweise | 255 |
Stichwortverzeichnis | 257 |