Это вопрос, который часто задают в разных формах и часто получают ответы «лол, ты не правильно делаешь». Я уверен, что это потому, что есть сценарий здравого смысла, который люди (включая меня) пытаются использовать в качестве реализации, и решение не очевидно (если вы не делали этого раньше).
Принял бы ответ, который "позволяет летать из бутылки".
С учетом
project/
__init__.py
/code
__init__.py
sut.py
/tests
__init__.py
test_sut.py
Где начинается tests_sut.py:
import code.sut
Запуск тестов носа в корневом каталоге приводит к:
ImportError: No module named code.sut
Пройденные пути:
а) сделать родственника, используя
from ..code import sut
б) добавить корень проекта в PYTHONPATH
в) используйте
sys.path.append
для добавления пути .. перед импортом в начале каждого тестового модуля.
г) просто не забудьте сделать
setup.py
в проекте по установке модулей в site-пакеты перед запуском тестов.
<Ч />
Таким образом, требуется, чтобы тесты располагались под корнем тестового пакета и имели доступ к проекту. Все вышеперечисленное не кажется мне «естественным», оказалось проблематичным или кажется слишком тяжелым трудом!
В Java это работает, но в основном благодаря инструменту сборки / IDE, помещающему все ваши классы в путь к классам. Возможно, проблема в том, что я ожидаю "магии" от Python? Как уже отмечалось в тестах веб-фрейма Flask, вариант d) представляется предпочтительным.
В любом случае приведенные ниже утверждения, рекомендующие предпочтительное решение, устранят ощущение "неестественности" в моем собственном.