Suchen und Finden
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
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.