Kapitel 25
Testen und Tuning
682
25.2 Testen mit Docstrings – das Modul doctest
Das Modul doctest ermöglicht automatisches Testen über Docstrings. Ein Docstring ist ein
langer String, der zu Beginn eines Moduls oder unterhalb der Kopfzeile einer Funktion steht.
Er wird nicht als Programmtext, sondern als Kommentar interpretiert. Betrachten wir ein Bei-
spiel:
Die Idee des Testens über Docstrings ist folgende: Der Docstring enthält Testaufrufe der
Funktion. Man tut so, als würde man die Funktion im interaktiven Modus (in der Python-
Shell) aufrufen. Die Zeile mit dem Funktionsaufruf beginnt also mit dem Prompt
>>> der
Python-Shell. In der nächsten Zeile steht der Wert, den dieser Funktionsaufruf liefern
müsste, falls die Funktion korrekt arbeitet. Beispiel:
Testaufrufe im Docstring erzählen Geschichten. Sie sollen die Semantik der Funktion ver-
anschaulichen. Das obige Beispielskript enthält in seinem Docstring zunächst zwei typische
Beispiele. Sie illustrieren, was die Funktion eigentlich leistet. Im dritten Testaufruf geht es
um einen Sonderfall. Es wird geprüft, ob die Funktion auch dann ein Ergebnis (nämlich
0)
liefert, wenn ihr eine leere Liste übergeben wird.
Ein Modul mit Funktionsdefinitionen kann von anderen Modulen importiert werden. In
diesem Fall wird beim Programmlauf der Docstring vom Python-Interpreter einfach über-
sprungen.
# quadratsumme.py
def quadratsumme (s):
""" Summe der Quadrate der Elemente einer Zahlenliste
>>> quadratsumme ([1, 2, 3]) # 1 + 4 + 9
1 4
>>> quadratsumme ([10, 10, 10]) # 100+100+100
3 0 0
>>> quadratsumme ([])
0
" " "
summe = 0
for n in s:
summe = summe + n**2
return summe
if __name__ == "__main__": #1
import doctest
doctest.testmod(verbose=True) #2
>>> quadratsumme ([1, 2, 3]) # 1 + 4 + 9
14
683
25.2
Testen mit Docstrings – das Modul doctest
Zum Testen ruft man die Moduldatei direkt auf. In diesem Fall hat das Modul-Attribut
__name__ den Wert "__main__". In Zeile #1 des obigen Skriptes wird das geprüft und gege-
benenfalls die Funktion
testmod() aus dem Modul doctest aufgerufen (#2).
Die Funktion
testmod() wertet sämtliche in dem Modul vorkommenden Docstrings aus
und führt die darin spezifizierten Anweisungen aus. Im obigen Beispiel wird
testmod() im
ausführlichen Modus aufgerufen. Das Schlüsselwort-Argument
verbose wird auf True
gesetzt (#2). Wenn Sie das obige Beispielskript ausführen, liefert testmod() folgenden aus-
führlichen Bericht:
Die Funktion
testmod() kann auch ohne Argument aufgerufen werden. Dann liefert sie
nur dann einen Bericht, wenn Fehler aufgetreten sind. Wir verändern das obige Beispiel ein
wenig und verlangen nun zusätzlich, dass unsere Funktion
quadratsumme() auch dann ein
Ergebnis (nämlich
0) zurückgibt, wenn sie ohne Argument aufgerufen wird.
Trying:
quadratsumme ([1, 2, 3])
Expecting:
1 4
ok
Trying:
quadratsumme ([10, 10, 10])
Expecting:
3 0 0
ok
Trying:
quadratsumme ([])
Expecting:
0
ok
1 items had no tests:
__main__
1 items passed all tests:
3 tests in __main__.quadratsumme
3 tests in 2 items.
3 passed and 0 failed.
Test passed.
def quadratsumme (s):
" " "
>>> quadratsumme ([])
0
>>> quadratsumme ()
0

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.