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?
Grundsätzliche Fragen zu doctests
Das hast du missverstanden. Natürlich implementiert man nur einmal. Wie zB hier zu sehen:
https://docs.python.org/2/library/doctest.html
https://docs.python.org/2/library/doctest.html
@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?
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?