Ursprungsmitteilung
Thema Unerwaretes Verhalten von doctest in TigerJython 
Autor Christian Boller 
Eingangsdatum 2017-11-23 08:37:01.0 
Mitteilung Zuerst vielen Dank für die TigerJython-Lernumgebung und das wunderbare Lehrmittel! Beides bewährt sich bei mir im Informatik-Unterricht auf Gymnasialstufe ganz hervorragend.

Kürzlich habe ich versucht, das doctest Modul in TigerJython zu benutzen und bin auf ein unerwartetes Verhalten gestossen: doctest.testmod() lässt sich wie gewünscht aufrufen und erkennt auch den __doc__ String der Funktion. Trotzdem werden die Testfälle nicht geprüft (Ausgabe: "1 items had no test: __main__").

Lasse ich das gleiche Python-Skript in der Kommandozeilen-Version von python (Python 3.6.3 oder Python 2.7.14) laufen, schliesst der erste Testfall wie erwartet mit Erfolg ab, der zweite reklamiert wie erwartet, dass square(2) den Wert 4 haben sollte:

# Beispiel für doctest

def square(x):
"""
>>> square(4)
16
>>> square(2)
1
"""
return x*x

if __name__ == '__main__':
import doctest
print(square.__doc__)
doctest.testmod(verbose=True)
 
 
      
Antworten
Thema doctest 
Autor Aegidius Plüss 
Eingangsdatum 2017-11-24 07:18:40.0 
Mitteilung Danke für die Forumanfrage. Ich kann das Problem reproduzieren und ich habe es zur Bearbeitung dem Chief Developer von TigerJython weitergeleitet.

Sie hören wieder von uns.

MfG 
 
Thema doctest in TigerJython 
Autor Aegidius Plüss 
Eingangsdatum 2017-11-29 08:30:46.0 
Mitteilung Nach Abklärungen mit dem Chief Developer von TigerJython nehme ich wie folgt Stellung zum Problem:

"doctest" arbeitet über Reflection und wir sehen, dass TigerJython tatsächlich das aktuelle Modul nicht korrekt zurückliefert.

Dies hat folgenden Grund: Weil wir die Datei intern über "exec" ausführen und nicht als Datei, legt Jython kein eigentliches Modul an, sondern lässt das Hauptmodul "__main__" leer. Dass das __name__ == '__main__' überhaupt funktioniert, liegt an einem Hack, den wir vor Jahren eingebaut haben, der zeigt, dass hier an und für sich kein Modul ausgeführt wird.

Da "doctest" nur über Module funktioniert, müsste der entsprechende Code als eigene Datei in einem Modul abgespeichert und dann mittels "import" in TigerJython geladen werden.

Es wäre zwar gut und richtig, diese Problematik in TigerJython anzugehen, aber aufgrund des damit verbundenen Aufwands werden wird dies in absehbarer Zukunft so nicht einbauen können.

Fazit: doctest wird in dieser Form von TigerJython leider nicht unterstützt.

Es tut mir leid, keinen besseren Bescheid zu geben.

MfG