Como organizo meus testes pytest se não os estou distribuindo com meu pacote?
Comosugerido na documentação do pytest, Configurei meu pacote com a intenção de nãonão distribuindo meus testes junto com meu pacote:
setup.py
mypkg/
__init__.py
mypkg/
appmodule.py
tests/
test_app.py
...
mas estou confuso sobre como garantir que esses testes sejam executados corretamente quando presentes (por exemplo, no Travis CI ou nos clones do diretório do projeto).
Desejo que as importações nos meus scripts de teste sejam aplicadas à fonte no adjacentemypkg/
diretório (e não para qualquermypkg
que pode estar instalado nosite-packages
), mas estou recebendo erros que me intrigam.
Se eu seguir o conselho nopytest
documentação e não coloque um__init__.py
notests/
então com
from __future__ import absolute_import
from mypkg.appmodule import *
eu recebo
ImportError: nenhum módulo chamado mypkg.appmodule
enquanto com
from __future__ import absolute_import
from ..mypkg.appmodule import *
eu recebo
ValueError: tentativa de importação relativa em não pacote
E se eu ignorar a documentação e incluir um__init__.py
, então com o último eu recebo
ValueError: tentativa de importação relativa além do pacote de nível superior
Somente incluindo uma__init__.py
e usando
from __future__ import absolute_import
from mypkg.appmodule import *
meus testes serão executados. Mas não está claro para mim que isso importará a fonte do adjacentemypkg/
diretório se ummypkg
está instalado emsite-packages
.
Qual é a maneira correta de organizar meupytest
testes para que eles sejam separados - e não distribuídos com - a fonte dos meus projetos, mas sempre importe a fonte adjacente e não a versão do pacote que está instalado em outro lugar?