Это вопрос, который часто задают в разных формах и часто получают ответы типа «лол, ты не делаешь это должным образом». Совершенно уверен, что это потому, что есть Сценарий здравого смысла люди (включая меня) пытаются использовать в качестве реализации, и решение неочевидно (если вы не делали этого раньше).
Примет ответ, который «позволяет вылететь из бутылки» .
Учитывая
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
Пройденные пути:
a) сделать родственника с помощью
from ..code import sut
b) добавить корень проекта в PYTHONPATH
c) используйте
sys.path.append
, чтобы добавить путь .. перед импортом в начале каждого тестового модуля.
d) просто не забудьте выполнить
setup.py
в проекте, чтобы установить модули в пакеты сайта перед запуском тестов.
Таким образом, требуется, чтобы тесты располагались под корнем тестового пакета, у которого есть доступ к проекту. Все вышеперечисленное не кажется мне "естественным", оказалось проблематичным или кажется слишком тяжелым!
В java это работает, но в основном с помощью вашего инструмента сборки / IDE, размещающего все ваши классы в пути к классам . Возможно, проблема в том, что я жду «волшебства» от Python? В тестах веб-фреймворков Flask было отмечено, что вариант d) кажется предпочтительным.
В любом случае приведенные ниже утверждения, рекомендующие предпочтительное решение, устранят ощущение "неестественности" в моем собственном.