Kapitel 25
Testen und Tuning
692
25.4.2 Normalisierte Whitespaces – doctest-Direktiven
Gehen wir weiter durch den Docstring des Beispielmoduls. Ab Zeile #B wird die Methode
rank() getestet. Nach dem Methodenaufruf folgt der erwartete Rückgabewert, eine ganze
Zahl, die den Rang eines Wortes angibt. Das ist völlig unproblematisch, weil ganze Zahlen
einfach darzustellen sind. Schwieriger wird es, wenn Strings zurückgegeben werden. Der
Methodenaufruf
r.getTop(n) liefert einen formatierten HTML-Text, in dem die ersten n
Einträge der Rangliste wiedergegeben sind (ab Zeile #C). Ein solcher String kann sehr lang
und unübersichtlich sein. Für den Test muss die erwartete Ausgabe Zeichen für Zeichen mit
dem tatsächlich zurückgegebenen Wert übereinstimmen. Es macht Sinn, einen solchen
String auf mehrere Zeilen verteilen, wie im Testfall
#D. Hier liefert der Testaufruf
eigentlich das Ergebnis
Damit das erwartete Ergebnis auf mehrere Zeilen verteilt werden kann, haben wir eine
doctest-Direktive verwendet. Sie steht hinter dem Testaufruf und beginnt mit
gefolgt von der eigentlichen Direktive
Sie bewirkt, dass vor dem Vergleich der erwarteten und tatsächlichen Rückgabewerte alle
vorkommenden Whitespace-Zeichen – dazu gehören Leerzeichen, Tabulatorzeichen und
Zeilenwechsel – normalisiert werden. Das heißt, eine Folge von Whitespace-Zeichen wird
durch ein einzelnes Leerzeichen ersetzt.
25.4.3 Ellipsen verwenden
Wie erwähnt, kann ein String, der von einer Methode berechnet wird, sehr lang sein.
Manchmal möchte man einen solchen String nicht komplett, sondern nur stellenweise prü-
fen. Dann verwendet man bei der Formulierung der erwarteten Antwort Ellipsen. Eine
Ellipse ist eine Folge von drei Punkten
..., die für eine beliebig lange Folge beliebiger Zei-
chen steht. Mit Ellipsen kann man also lange Zeichenketten verkürzt darstellen. Der String
passt z.B. zu folgenden Strings:
r.getTop(2)
'Titan 3 <br> Einstein 2 <br> '
#doctest:
+NORMALIZE_WHITESPACE
"Montag, ...Sonntag"
"Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag"
"Montag, Dienstag, Sonntag"
"Montag, Sonntag"

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.