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 und
  • unittest, 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.