Domanda

Non ho problema di pacchetti python e test. Sto scrivendo un'applicazione utilizzando wx python e hanno la seguente struttura di base della cartella / pacchetto per le parti gui. Il mainframe.py finestra ha una dipendenza al logpane.py pannello, che può essere facilmente importata utilizzando un'importazione assoluto in mainframe.py :

import guiapp.utilviews.logpane

layout della cartella / pacchetto:

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

Tuttavia, per le parti GUI dell'applicazione mi piacerebbe, oltre a test di unità (e pongono nessun problema), hanno un piccolo "test" / esempio per ogni visualizzazione. Cioè, per la logpane, mi piacerebbe avere piccolo esempio eseguibile che lauch un'applicazione osso nuda che mostra la fine di testare il layout è ok, ecc Il modo in cui ho iniziato era che avevo una

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

nel file effettiva attuazione del pannello / vista stessa. Questo ha funzionato meraviglie per la logpane. Ho potuto solo eseguire il file standalone di avere uno sguardo alla vista e vedere che teneva insieme.

Ma, naturalmente, la strategia si ruppe per la mainframe.py dal momento che la dipendenza di logpane.py non può essere risolto. Ciò in quanto il modulo principale corrente è il mainframe.py e l'unico modo in cui può raggiungere mainframe.py il pacchetto utilviews è se il modulo principale / lanciato è più in alto nella struttura.

Quindi, come faccio a strutturare questi tipi di test? Per i test di unità che uso naso che è bello e si prende cura del problema dal momento che il naso è lanciato per la cartella MainApp (quindi tutti i riferimenti intrapackage funziona). Ma questi test sono come piccoli programmi stand-alone. Ho semplicemente non può ingombrare la cartella MainApp con questi file Python (ci saranno molti di questi file). Ci sono un altro modo posso realizzare questo?

Ogni ingresso è valido.

Grazie, Rickard

È stato utile?

Soluzione

Si potrebbe utilizzare PYTHONPATH. Impostarla nella directory principale del progetto, prima di eseguire il file di test. Sarà quindi in grado di risolvere tutti i vostri importazioni proprio come se si sarebbe esecuzione da quella directory.

$ 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top