.. include:: markup.rst ****** Testen ****** Testen ist ein wesentlicher Bestandteil eines Softwareentwicklungsprozesses. Darunter versteht man das Prüfen, ob das :mark:`Programm korrekte Ergebnisse liefert`. Aspekte dabei: * Die Entwicklung von Testszenarien :mark:`parallel zur Implementierung`. * Das :mark:`automatisierte` Testen bei Programmveränderungen. * Ausgabe von :mark:`Testberichten`. :mark:`Python` bietet zwei :mark:`Testmöglichkeiten` an: * ``docstest``, für einfache Projekte und * ``unittest``, für umfangreiche Projekte. Testen mit docstest =================== Hier wir exemplarisch die einfacher der beiden - ``doctest`` - vorgestellt. Dafür erweitern wir ein früheres Beispiel entsprechend (``test_vektor.py``): .. literalinclude:: src/test_vektor.py :language: python 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 :mark:`für alle Funktionen` implementiert werden. * Achtung bei Gleitkommazahlen - die :mark:`Ausgabe muss 1:1 gleich` sein. * Diese Ausgabe könnte man :mark:`automatisiert` auswerten und einen Bericht erstellen. Ü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.