Tests & Dokumentation
Verfasst: Dienstag 19. April 2011, 15:03
Hallo,
langsam aber sicher komme ich mit meinen Skripts in einen Bereich, wo Änderungen an einem Skript Einfluss auf andere Skripte haben. Irgendwas mal schnell geändert, und *puff* - schon funktioniert die Anwendung nicht mehr, die das Skript mitbenutzt.
Um solche Probleme zu umgehen, wollte ich jetzt mich in das Testen von Code einfuchsen. Bei Python selbst ist ja doctest und unittest dabei. Beim EGG von SQLAlchemy ist ein nose - Ordner dabei, wieder ein Testframework. Und es gibt sicherlich noch mehr. Jetzt wollte ich mal fragen, was denn hier so im Forum verwendet wird? Gefühlsmäßig würde ich zu Pythons unittest greifen, oder ist unittest nicht mehr aktuell, weil was besseres existiert?
Jetzt habe ich noch einige Fragen zur Handhabung von Tests: Wie geht man mit mit Tests um, die z.B. Datenbank - Funktionen testen? Wie teste ich, ob die Row, die mir meine Funktion zurückgibt, auch dem entspricht, was ich haben möchte? Nehmen wir an, ich will einen Reader für OpenStreetMap - Daten aus einer Datenbank schreiben: Für die Tests kann ich ja jetzt nicht vorraussetzen, dass eine OpenStreetMap - Datenbank vorhanden ist, d.h. ich müsste da ja was Erzeugen, was sich wie die Datenbank verhält und auch noch den richtigen Inhalt hat, oder?
Wie testet man, ob z.B. die XML-Repräsentation eines OSM-Datensatzes dem entspricht, was ausgelesen werden sollte? Mittels Zeichenketten-Vergleich? Da kann es doch eigentlich nicht auf Leerzeichen und Umbrüche ankommen, sondern nur das Markup sollte getestet werden ...
Oder wenn ich eine Bibliothek wie OGR (siehe auch hier) verwende, die mir beim Lesen einer Datei ein Layer oder Feature oder was auch immer zurückgibt, wie teste ich da, ob meine Lese-Funktion das zurückgibt, was ich erwarte? Genau das selbe Layer oder Feature erzeugen? Ist der Testcase dann nicht sehr kompliziert und unter Umständen auch sehr umfangreich? Und geht das überhaupt bei so C-API Anbindungen (SWIG)? Oder bei Datenbank-Rows? Ist row_gelesen == row_erwartet, wenn der Inhalt der Felder gleich ist? Ich weiss, die Fragen sind zum Teil recht naiv, aber das sind so konzeptionelle Fragen, die sich mir stellen ...
Dann habe ich noch eine Frage zur Dokumentationserzeugung. Sphinx gefällt mir eigentlich sehr gut, nur gibt es auch etwas, was eine API-Dokumentation automatisiert erzeugen kann? So etwas wie bei OpenLayers z.B.? Die verwenden ja Naturaldocs, was auch Python kann, aber gibt es da noch etwas anderes? Denn etwas unschön finde ich dabei, dass man im Code die Dokumentation schreibt.
Mir fehlt da leider der Überblick, deshalb wäre ich froh, wenn ich hier ein paar Anregungen bekommen könnte, was andere so verwenden
Danke
Frank
langsam aber sicher komme ich mit meinen Skripts in einen Bereich, wo Änderungen an einem Skript Einfluss auf andere Skripte haben. Irgendwas mal schnell geändert, und *puff* - schon funktioniert die Anwendung nicht mehr, die das Skript mitbenutzt.
Um solche Probleme zu umgehen, wollte ich jetzt mich in das Testen von Code einfuchsen. Bei Python selbst ist ja doctest und unittest dabei. Beim EGG von SQLAlchemy ist ein nose - Ordner dabei, wieder ein Testframework. Und es gibt sicherlich noch mehr. Jetzt wollte ich mal fragen, was denn hier so im Forum verwendet wird? Gefühlsmäßig würde ich zu Pythons unittest greifen, oder ist unittest nicht mehr aktuell, weil was besseres existiert?
Jetzt habe ich noch einige Fragen zur Handhabung von Tests: Wie geht man mit mit Tests um, die z.B. Datenbank - Funktionen testen? Wie teste ich, ob die Row, die mir meine Funktion zurückgibt, auch dem entspricht, was ich haben möchte? Nehmen wir an, ich will einen Reader für OpenStreetMap - Daten aus einer Datenbank schreiben: Für die Tests kann ich ja jetzt nicht vorraussetzen, dass eine OpenStreetMap - Datenbank vorhanden ist, d.h. ich müsste da ja was Erzeugen, was sich wie die Datenbank verhält und auch noch den richtigen Inhalt hat, oder?
Wie testet man, ob z.B. die XML-Repräsentation eines OSM-Datensatzes dem entspricht, was ausgelesen werden sollte? Mittels Zeichenketten-Vergleich? Da kann es doch eigentlich nicht auf Leerzeichen und Umbrüche ankommen, sondern nur das Markup sollte getestet werden ...
Oder wenn ich eine Bibliothek wie OGR (siehe auch hier) verwende, die mir beim Lesen einer Datei ein Layer oder Feature oder was auch immer zurückgibt, wie teste ich da, ob meine Lese-Funktion das zurückgibt, was ich erwarte? Genau das selbe Layer oder Feature erzeugen? Ist der Testcase dann nicht sehr kompliziert und unter Umständen auch sehr umfangreich? Und geht das überhaupt bei so C-API Anbindungen (SWIG)? Oder bei Datenbank-Rows? Ist row_gelesen == row_erwartet, wenn der Inhalt der Felder gleich ist? Ich weiss, die Fragen sind zum Teil recht naiv, aber das sind so konzeptionelle Fragen, die sich mir stellen ...
Dann habe ich noch eine Frage zur Dokumentationserzeugung. Sphinx gefällt mir eigentlich sehr gut, nur gibt es auch etwas, was eine API-Dokumentation automatisiert erzeugen kann? So etwas wie bei OpenLayers z.B.? Die verwenden ja Naturaldocs, was auch Python kann, aber gibt es da noch etwas anderes? Denn etwas unschön finde ich dabei, dass man im Code die Dokumentation schreibt.
Mir fehlt da leider der Überblick, deshalb wäre ich froh, wenn ich hier ein paar Anregungen bekommen könnte, was andere so verwenden
Danke
Frank