Frage

Ich habe Probleme über Python-Pakete und testen. Ich schreibe eine Anwendung mit wx Python und haben folgende Grund Ordner / Paketstruktur für die GUI-Teile. Das mainframe.py Fenster hat eine Abhängigkeit auf den logpane.py Panel, das leicht einen absoluten Import mit in importiert mainframe.py :

import guiapp.utilviews.logpane

Ordner / Paket Layout:

mainapp
   - main.py
   guiapp
       - __init__.py
       utilviews
           - __init__.py
           - logpane.py
           - other stuff...
       mainview
           - __init__.py
           - mainframe.py
           - other stuff here...
       other views...

Doch für die gui Teile der Anwendung würde Ich mag zusätzlich zu Unit-Tests, (und sie sind kein Problem), haben einen kleinen „Test“ / Beispiel für jede Ansicht. Das heißt, für die logpane, würde Ich mag kleines runnable Beispiel haben, die mit einer nackten Knochen Anwendung zeigt die Ansicht Test lauch werden das Layout ok etc. Die Art, wie ich anfing war, dass ich hatte ein

if __name__ == "__main__":
    # create some small window and a wx app
    # instanciate the panel and launch the app
    pass

in der tatsächlichen Umsetzung Datei des Panels / betrachten sich. Das funktionierte Wunder für die logpane. Ich konnte einfach die Datei Standalone laufen einen Blick auf die Aussicht haben und sehen, dass es zusammengehalten werden.

Aber natürlich ist die Strategie brach für die mainframe.py , da die Abhängigkeit logpane.py konnte nicht aufgelöst werden. Der seit dem aktuellen Hauptmodul ist die mainframe.py und das einzige Weg, mainframe.py kann das utilviews Paket erreichen ist, wenn das Haupt / gestartet Modul weiter oben im Baum ist.

Wie strukturiere ich diese Art von Tests? Für Unit-Tests verwenden I Nase , das ist schön und kümmert sich um das Problem, da die Nase gemäß dem MainApp Ordner (so alle intrapackage Referenzen Werke) gestartet wird. Aber diese Tests sind wie kleine eigenständige Programme. Ich kann einfach nicht die MainApp-Ordner mit diesen Python-Dateien Krempel (es gibt viele solche Dateien sein). Gibt es irgendeine andere Weise, die ich dies erreichen kann?

Jeder Eingang ist wertvoll.

Danke, Rickard

War es hilfreich?

Lösung

Sie könnten PYTHONPATH verwenden. Setzen Sie sich auf Ihr Haupt-Projektverzeichnis, bevor Sie Ihre Testdatei ausgeführt wird. Es wird dann in der Lage sein, alle Ihre Importe zu lösen, als ob Sie von diesem Verzeichnis würden ausgeführt wird.

$ find
.
./test
./test/test.py
./some
./some/__init__.py

$ cat some/__init__.py 
x = 10

$ cat test/test.py 
import some
print some.x

$ cd test
$ export PYTHONPATH=..
$ python test.py
10
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top