10. Testen¶
Testen ist ein wesentlicher Bestandteil eines Softwareentwicklungsprozesses. Darunter versteht man das Prüfen, ob das Programm korrekte Ergebnisse liefert.
Aspekte dabei:
- Die Entwicklung von Testszenarien parallel zur Implementierung.
- Das automatisierte Testen bei Programmveränderungen.
- Ausgabe von Testberichten.
Python bietet zwei Testmöglichkeiten an:
docstest
, für einfache Projekte undunittest
, für umfangreiche Projekte.
10.1. Testen mit docstest¶
Hier wir exemplarisch die einfacher der beiden - doctest
- vorgestellt.
Dafür erweitern wir ein früheres Beispiel entsprechend (test_vektor.py
):
class Vektor:
""" 2D Vektor Klasse """
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
""" Ueberladener '+' Operator
>>> print(Vektor(3.0,4.0) + Vektor(1.0,2.0))
[4.0 6.0]
"""
return Vektor( self.x+other.x, self.y+other.y )
def __str__(self):
""" Ueberladene print Funktion """
#return "[%8.6f %8.6f]" % (self.x, self.y)
return f"[{self.x} {self.y}]"
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
Ausgabe:
Trying:
print(Vektor(3.0,4.0) + Vektor(1.0,2.0))
Expecting:
[4.0 6.0]
ok
4 items had no tests:
__main__
__main__.Vektor
__main__.Vektor.__init__
__main__.Vektor.__str__
1 items passed all tests:
1 tests in __main__.Vektor.__add__
1 tests in 5 items.
1 passed and 0 failed.
Test passed.
Anmerkungen:
- Kommentare im
__docstring__
beginnend mit>>>
werden getestet. - Ein Test sollte für alle Funktionen implementiert werden.
- Achtung bei Gleitkommazahlen - die Ausgabe muss 1:1 gleich sein.
- Diese Ausgabe könnte man automatisiert auswerten und einen Bericht erstellen.
10.2. Übungsbeispiele¶
Aufgabe 10.1
Gehen Sie von Ihrer Lösung der Aufgabe 8.1. aus. Schreiben Sie für jede Methode der Klasse Vektor
eine Testfunktion, sodass die Klasse mit Hilfe des Moduls doctest
auf Ihre Richtigkeit überprüft werden kann.
Aufgabe 10.2
Gehen Sie von der Lösung von Aufgabe 5.1 aus. Schreiben Sie einen doctest
für die Funktion berechne_Distanz
, der überprüft, ob das Ergebnis der Funktion auf 4 Nachkommastellen korrekt ist.