2013-01-16 10 views
16

Questa è una domanda sulla verifica dell'impostazione dell'ambiente.Come far sì che i test delle unità python trovino sempre i file di dati di test quando vengono eseguiti da diverse directory di lavoro?

Nel mio progetto, ho alcuni test di unità che accedono ai file di dati di test. Questi test unitari possono essere eseguiti dalla mia directory di progetto tramite un test runner. Oppure posso eseguire singolarmente ciascun file/modulo di test, ad esempio per scopi di debug.

Il problema è che, a seconda di dove eseguo i test, la directory corrente è diversa. Quindi aprire un file di dati di test, come di seguito, assegnando un percorso relativo alla directory corrente non funzionerà quando quei file vengono eseguiti dalla directory di progetto, poiché il file di dati di test non si trova in quella directory.

f = open('test_data.ext', 'r') 

ho pensato di usare __file__ utilizzare un percorso relativo modulo di test corrente, ma questa doesn't work when the test module calling __file__ is the one being run individually.

In che modo la gente generalmente risolve questo problema?

+0

Mi rendo conto che questa domanda non è puramente python specifica, ma vorrei privilegiare soluzioni idiomatiche pitone , Se ce ne sono. – ptrico

risposta

6

Un certo numero di modi diversi mi vengono in mente:

  1. impostare una variabile d'ambiente per la directory dei dati
  2. scrivere un piccolo modulo che si sempre di importazione che ha il solo scopo di avere una posizione fissa rispetto la directory di dati, quindi chiamare __file__ da lì
  3. generare i dati in fase di esecuzione
  4. memorizzare i dati in un database, piuttosto che un file
  5. Conservare il i dati in una posizione fissa nel file system, piuttosto che una posizione relativa al pacchetto
  6. Non eseguire il codice di prova direttamente

La soluzione che rende più senso per voi dipende dalla vostra ambiente e la vostra specifica dati e programma.

+0

Grazie per le varie opzioni. Ho finito per andare al secondo posto, dopo aver inizialmente scartato perché non riuscivo a farlo funzionare. Va tutto bene ora. – ptrico

+0

Ho usato anche il n. 2, con questo approccio: http://stackoverflow.com/a/5748583/1082367 - os.path.abspath (inspect.getsourcefile (local_function)) –

-1

Non sono sicuro che sia la soluzione completa, ma per il test delle unità in Python, utilizzo sempre Nose. Ha un'eccellente procedura di verifica del test. Puoi trovare il suo meccanismo here. Forse si può avere qualche idea da utilizzare per i test tradizionali unità di Python come pure ..

py.test utilizza anche un meccanismo di scoperta pulito ..

+1

+1 per suggerire di utilizzare un framework di test unitario per test di corsa. Non risolve necessariamente il problema del file di dati esterno, ma sicuramente una buona idea, nondimeno. –

+0

Esatto, e il test runner che ho menzionato nella domanda è in realtà naso. – ptrico

Problemi correlati