У меня есть следующая структура проекта:
foo
│
├── foo
│ ├── cli
│ │ ├── tests
│ │ └── __init__.py
│ ├── core
│ │ ├── tests
│ │ └── __init__.py
│ ├── tests
│ │ ├── __init__.py
│ │ └── test_foo.py
│ ├── __init__.py
│ └── foo.py
├── kube
├── requirements
├── ...any-other-non-source-related
└── README.md
Внутри файла foo/foo.py
у меня есть следующий код заполнителя:
import cli
import core
def say_hi():
print('hi')
if __name__ == '__main__':
say_hi()
И в файле foo/tests/test_foo.py
У меня естьследующее:
from foo import foo
def test_foo():
foo.say_hi()
assert False
Затем в оболочке я получаю следующее:
$ python foo/foo.py
hi
$ pipenv run pytest
===================== test session starts =====================
platform linux -- Python 3.7.4, pytest-5.3.1, py-1.8.0, pluggy-0.13.1
rootdir: /xxx/xxx/xxx/xxx/python-project-folder-structures
collected 0 items / 1 error
===================== ERRORS =====================
_____ ERROR collecting foo/tests/test_foo.py _____
ImportError while importing test module '/xxx/xxx/xxx/xxx/python-project-folder-structures/foo/tests/test_foo.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
foo/tests/test_foo.py:1: in <module>
from foo import foo
foo/foo.py:1: in <module>
import cli
E ModuleNotFoundError: No module named 'cli'
!!!!!!! Interrupted: 1 error during collection !!!!!!!
===================== 1 error in 0.05s =====================
Может кто-нибудь помочь? Почему Pytest не основывает мой импорт? Я пробовал несколько подходов, даже с папкой tests
вне папки foo
(на корневом уровне), но ошибка все еще сохраняется.
Единственный способ, который я нашел, чтобы исправить этопоместив файл conftest.py
на уровень кода, чтобы он был обнаружен pytest
. Я действительно не хочу этого делать, так как я хочу отделить свое тестирование от моего исходного кода.