Modul in der interaktiven Konsole aufrufen

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
Higgs
User
Beiträge: 5
Registriert: Sonntag 29. Juli 2012, 07:54

Donnerstag 2. August 2012, 13:59

Hallo,

Ein Modul kann ich ja von der Shell aus mit python3 <name>.py aufrufen und mein Testcode in dem Block if __name__ == '__main__': wird ausgeführt. Wie mache ich das in der interaktiven Konsole von Eclipse/PyDev? Der Pythonpath hat den Rootpfad meines Projektes drin, aber ich schaffe es nicht das Modul mytest.py in dem Paket app.sys aufzurufen, per import kein Problem, aber dies ist ja nicht gleich zu setzen mit einem Aufruf von außen.

Kann mir da jemand auf die Sprünge helfen?
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Donnerstag 2. August 2012, 17:39

Naja, nach dem if __name__ == '__main__': sollte eigentlich nicht viel kommen, üblicherweise nur der Aufruf der main-Funktion, also main(). Du kannst also main importieren und aufrufen. Hast du hinter der __main__-Bedingung allerdings 50 Zeilen Code, die du testen willst, machst du dir dein Leben unnötig schwerer als du musst.
Higgs
User
Beiträge: 5
Registriert: Sonntag 29. Juli 2012, 07:54

Donnerstag 2. August 2012, 19:08

Da diese Abfrage nur positiv ist wenn das Modul einzeln aufgerufen wird, wollte ich dies nutzen um jedes einzelne Modul mit einem kurzen Code zu testen, ohne gleich einen Unit-Test zu entwickeln.

Wie testet ihr einzelne Module ohne gleich das Ganze zu testen?
lunar

Donnerstag 2. August 2012, 19:34

@Higgs: Mit Unit-Tests eben… es nimmt sich doch vom Aufwand her nichts, ob Du den Code zum Testen in das Modul, oder gleich in einen richtigen Unittest schreibst. Ich kann mich nicht erinnern, jemals Testcode innerhalb eines Moduls geschrieben zu haben…
BlackJack

Donnerstag 2. August 2012, 20:06

@Higgs: Unit-Tests können in Python sehr leichtgewichtig sein. Schau Dir mal `py.test` oder `nose` an. Die suchen einfach in allen Modulen nach Namen die einem bestimmten Muster entsprechen und führen die aus. Im einfachsten Fall Funktionen deren Namen mit `test_` anfangen. Nicht bestandene Tests müssen einen `AssertionError` auslösen. Das war's schon.
Higgs
User
Beiträge: 5
Registriert: Sonntag 29. Juli 2012, 07:54

Donnerstag 2. August 2012, 20:16

Ok, danke für die Tipps. Ich werde mich dann mal in Unittest einlesen und habe da sicher noch die ein oder andere Frage.
Antworten