Seite 1 von 1

Module testen...

Verfasst: Donnerstag 28. Juli 2011, 08:17
von mutetella
Guten morgen!

Zum Testen gehe ich wie folgt vor:
Ich importiere das Modul, in dem sich das Zeugs, das ich testen möchte, befindet. Nachdem ich Korrekturen vorgenommen habe mache ich einen reload des Moduls. Nun kommt es natürlich auch vor, dass das Modul wiederum andere Module importiert, die bei einem reload ebenfalls neu geladen werden sollten. Quasi ein rekursives reload.
Bisher habe ich

Code: Alles auswählen

import a
#Alles mögliche auch an von 'a' importierten Modulen geändert
reload(a)
reload(a.b)
#etc.
gemacht. Das kann ich aber so langsame vergessen, weil ich spätestens nach 3 geänderten Modulen dem reload-Wahnsinn verfalle.

Hätte jemand 'nen Tipp für mich?

mutetella

Re: Module testen...

Verfasst: Donnerstag 28. Juli 2011, 08:41
von BlackJack
@mutetella: Unittests schreiben!? :-)

Re: Module testen...

Verfasst: Donnerstag 28. Juli 2011, 09:21
von snafu
Hinzu kommt noch, dass die Codezeilen für die Tracebacks nicht mehr richtig passen, weil (zumindest bei IPython) dies wohl gecached wird und dann die Markierung, die auf die Zeile zeigen soll, wo der Fehler aufgetreten ist, unter Umständen verschoben ist. Ich mach immer ganz einfach einen Neustart des Interpreters. :)

//edit: Aber Unittests, sofern man sich dazu aufraffen kann, sind natürlich auch eine gute Idee. ;)

Re: Module testen...

Verfasst: Donnerstag 28. Juli 2011, 15:33
von mutetella
@BlackJack:
Ich hab' geahnt, dass wohl sowas kommen wird... Noch eine Baustelle, die ich jetzt aber noch nicht starten werd', weil ich sowas noch nie gemacht hab' und endlich mal mit meinem sch... Kalender eine erste mehr oder weniger nutzbare Version erreichen möchte... :wink:
Das Dumme dabei ist nur: Interessieren tät's mich ja schon... :)

@snafu:
Ich starte auch kurzerhand iPython neu, weil eigenartigerweise nicht einmal ein 'reset' ausreicht :( .

Warum gibt es eigentlich keine 'reload'-Option für rekursives Neuladen? Die Idee ist ja nicht so verwegen, oder?

mutetella

Re: Module testen...

Verfasst: Donnerstag 28. Juli 2011, 15:43
von BlackJack
@mutetella: Wenn man etwas neues, verändertes testen möchte, sollte man alles neu erstellen. Denn selbst bei einem rekursiven neuladen ist ja nicht sicher gestellt, dass nicht irgendwo alte Exemplare verwendet werden, weil sie zum Beispiel in einem Modul referenziert werden, welches auch von einem rekursiven neuladen nicht betroffen wäre. Sauberste Lösung ist ein kompletter Neustart.

Unittests müssen nicht kompliziert sein. Schau Dir mal `nose` oder `py.test` an.

Re: Module testen...

Verfasst: Freitag 29. Juli 2011, 07:23
von frabron
Jo, nose ist einfach in der Anwendung. Das kann man auch einfach mit bereits existierenden Projekten verwenden. Und ich finde, es ist immer ein gutes Gefühl, wenn alle Tests ohne Probleme durchlaufen. Für meinen Jsonifyer z.B. sieht ein Test so aus:

Code: Alles auswählen

def test_layer():
    msm = get_mapfile()
    msl = msm.getLayer(0)

    l = Layer(mapscript_=msl)
    eq_(l.name, 'relief')
    eq_(l.dump, False)
    eq_(l.type, 'raster')

    jl = l.to_json()
    new_l = Layer(mapfile_encoding='cp1252')
    new_l.name = 'Foo'
    eq_(new_l.mapscript.name, u'Foo'.encode('cp1252'))
    new_l.from_json(jl)

    eq_(l.name, 'relief')
    eq_(l.dump, False)
    eq_(l.type, 'raster')

Re: Module testen...

Verfasst: Freitag 29. Juli 2011, 08:09
von mutetella
Ok, dann werde ich mich da mal ranmachen...

Danke für Eure Inputs...