Pergunta

Tenho problemas sobre pacotes e testes Python. Estou escrevendo um aplicativo usando WX Python e tenha a seguinte estrutura básica de pasta/pacote para as peças da GUI. o mainframe.py A janela tem uma dependência para o logpane.py painel, que é facilmente importado usando uma importação absoluta em mainframe.py:

import guiapp.utilviews.logpane

Layout da pasta/pacote:

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

No entanto, para as partes da GUI do aplicativo, eu gostaria, além de testes de unidade (e eles não apresentam problemas), ter um pequeno "teste"/exemplo para cada visualização. Isto é, para o Logpane, gostaria de ter um pequeno exemplo de execução que virá uma aplicação de osso nua, mostrando a visão para testar que o layout está ok etc. A maneira como eu comecei foi que eu tinha um

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

No arquivo de implementação real do próprio painel/exibição. Isso fez maravilhas para o logpane. Eu poderia simplesmente executar o arquivo independente para dar uma olhada na vista e ver que ele se mantinha unido.

Mas é claro que a estratégia quebrou para o mainframe.py Desde a dependência de logpane.py não poderia ser resolvido. Isso desde o módulo principal atual é O mainframe.py e a única maneira de mainframe.py podem atingir o pacote UtilViews é se o módulo principal/lançado estiver mais adiante na árvore.

Então, como faço para estruturar esses tipos de testes? Para testes de unidade, eu uso nariz O que é bom e cuida do problema, já que o nariz é lançado de acordo com a pasta MainApp (para que todas as referências de intrapackage sejam obras). Mas esses testes são como pequenos programas independentes. Simplesmente não consigo desordenar a pasta MainApp com esses arquivos Python (haverá muitos desses arquivos). Existe alguma outra maneira de conseguir isso?

Qualquer entrada é valiosa.

Obrigado, Rickard

Foi útil?

Solução

Você poderia usar PYTHONPATH. Defina -o no seu diretório principal do projeto, antes de executar seu arquivo de teste. Será capaz de resolver todas as suas importações como se você estivesse executando esse diretório.

$ 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top