Grundsätzliche Fragen zu doctests

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Grendel
User
Beiträge: 50
Registriert: Samstag 19. Dezember 2015, 16:06

Hallo,
ich suche mir gerade ein paar Infos zum Thema Softwaretests, insbesondere zu den doctests, im Internet zusammen. Eine Sache, dir mir etwas fragwürdig erscheint ist, dass man, wenn man doctests nutzen will, die zu testenden Funktionen im Grunde immer zwei mal implementieren muss: einmal im Programmcode und anschließend im doctest-file. Wo liegt da der Nutzen? Denn wenn man eine Funktion im Programm falsch implementiert hat und die fehlerhafte Implementation in den Test übernimmt, ist am Ende nichts gewonnen. Und wenn man sich dann die Arbeit macht, den doctest anzupassen, bis der gewünschte Output erscheint, kann man es auch gleich im Programm selbst machen. Oder die Funktion ist korrekt, aber der Test ist fehlerhaft. Worst Case: man beginnt dann aufgrund des fehlerhaften Outputs die eigentliche Funktion umzuschreiben. Bei den häufig in Tutorials zu findenden Einfachtests wird das kaum passieren, aber wenn man tatsächlich mal testen will oder muss, weil der Code komplex ist, dann verdoppelt sich durch das Schreiben von doctests die Fehlerwahrscheinlichkeit und könnte sogar in die Irre führen. Oder habe ich da etwas grundsätzlich nicht verstanden?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das hast du missverstanden. Natürlich implementiert man nur einmal. Wie zB hier zu sehen:

https://docs.python.org/2/library/doctest.html
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Liefer doch mal eine zu testende Funktion, welche nicht mit einem "Einfachtest" getestet werden kann.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
BlackJack

@Grendel: Es gibt zwei Arten von Tests mit Doctests, zum einen das Testen der Dokumentation, das ist die eigentliche Aufgabe. Dabei geht es um Dokumentation die im Programm in Docstrings stehen kann, oder um externe Dokumentation wo Codebeispiele stehen wie der dokumentierte Code verwendet werden kann oder soll. In solchen Docstrings sollten keine ausgiebigen unittest-ähnlichen Tests stehen die möglichst den gesamten Code und alle Sonder- und Randfälle abdecken, denn so etwas möchte niemand in der Dokumentation lesen.

Daneben kann man Doctest auch für Unittests verwenden in dem man die einfach in eine entsprechende Textdatei schreibt.

In keinem der beiden Fälle sehe ich wo man da irgendwelche Funktionen für kopieren muss‽ Kannst Du mal ein Beispiel liefern wie das aussehen soll?
Antworten