Module testen...

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
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@mutetella: Unittests schreiben!? :-)
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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. ;)
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
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.
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

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')
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ok, dann werde ich mich da mal ranmachen...

Danke für Eure Inputs...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten