Come organizzare il mio modulo

5

Questo è attualmente il modo in cui lo sto organizzando.

myProject/
    README
    subproject1/
        __init__.py
        classA.py
        classB.py
        driver.py
        basicTest.py

Importazioni di driver da classA e classB e fornisce alcune funzionalità aggiuntive. basicTest importa anche da Driver e classA.

Ho utilizzato nosetests per scoprire ed eseguire tutti i test da basicTest.py. Funziona alla grande se sono nella directory subproject1. Tuttavia, non funziona se sono nella directory myProject di livello superiore. Le importazioni falliscono poiché i percorsi relativi sono poi tutti sbagliati. Ho bisogno di eseguire nosetests dalla directory principale da quando sto integrando Travis-CI e gestisce nosetests dal livello più alto.

Sembra che numpy contenga tutte le importazioni relative alla directory principale. Ma, quindi non posso eseguire i test da nessuna sottodirectory, che può essere fastidioso.

Guardandosi intorno sembra che l'unico modo per rendere eseguibili i test da entrambe le directory sia quello di sistemare sys.path nella parte superiore di basicTest.py. Sembra una cattiva idea. Questo suggerisce anche quella che sembra essere una soluzione hacky.

C'è una soluzione pulita là fuori, o è l'approccio migliore per importare semplicemente tutto ciò che riguarda la radice ed eseguire tutti i test da lì?

Aggiornamento: ho deciso una soluzione temporanea per dire a Travis-CI di andare in cd in subproject1 e quindi eseguire nosetests. Ciò ha richiesto il minor numero di modifiche da parte mia per far funzionare tutto. È comunque divertente e sto ancora cercando un layout migliore.

    
posta emschorsch 28.09.2015 - 21:47
fonte

1 risposta

3

Ti consiglio di usare py.test: è un buon framework di test

e hai due modi per strutturare il tuo progetto, il primo è:

myProject/
    README
    subproject1/
        __init__.py
        classA.py
        classB.py
        driver.py
        tests/
            basicTest.py

e il secondo è:

myProject/
    README
    subproject1/
        __init__.py
        classA.py
        classB.py
        driver.py
    tests/
        subproject1/
            basicTest.py
        subproject2/
            test2.py

dipende dalle tue esigenze, personalmente ho sempre il secondo metodo

    
risposta data 11.11.2015 - 09:38
fonte

Leggi altre domande sui tag