Como organizar meu módulo

5

Este é atualmente o jeito que estou organizando.

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

O driver importa de classA e classB e fornece algumas funcionalidades adicionais. O basicTest também importa do Driver e da classe A.

Estou usando nosetests para descobrir e executar todos os testes do basicTest.py. Isso funciona muito bem se eu estiver no diretório subproject1. No entanto, isso não funciona se eu estiver no diretório myProject de nível superior. As importações falham, pois os caminhos relativos estão todos errados. Eu preciso rodar nosetests no diretório principal, já que estou integrando o Travis-CI e ele roda nosetests do nível superior.

Parece que numpy faz todas as importações relativas ao diretório principal. Mas, então eu não posso executar os testes de qualquer um dos subdiretórios, o que pode ser irritante.

Olhando em volta, parece que a única maneira de tornar os testes executáveis em ambos os diretórios seria mexer no sys.path no topo do basicTest.py. Isso parece uma má ideia. Este sugere o que também parece ser uma solução hacky.

Existe uma solução limpa por aí, ou a melhor abordagem é simplesmente importar tudo em relação à raiz e executar todos os testes a partir daí?

Atualização: Eu decidi que uma solução temporária seria dizer ao Travis-CI para fazer o cd em subproject1 e depois rodar nosetests. Isso exigiu o menor número de alterações da minha parte para que tudo funcionasse. Parece engraçado e ainda estou procurando um layout melhor.

    
por emschorsch 28.09.2015 / 21:47
fonte

1 resposta

3

Eu recomendo que você use py.test: é uma boa estrutura de testes

e você tem dois caminhos para estruturar seu projeto, o primeiro é:

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

e o segundo é:

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

depende de suas necessidades, pessoalmente eu sempre o segundo método

    
por 11.11.2015 / 09:38
fonte