Как мне организовать мои файлы, чтобы python -m pytest
находил в них классы?
У меня есть следующая структура (в соответствии с соглашением pytest docs ) и несколько сообщения stackoverflow ( this или this , например):
├─ testapp
│ ├─ module
│ │ ├─ __init__.py
│ │ ├─ app.py
│ ├─ test
│ │ ├─ test_app.py
Файлы содержат следующее:
# __init__.py
from .app import App
# app.py
class App:
def __init__(self):
pass
def add(self, a, b):
return a + b
# test_app.py
import sys
import pytest
# sys.path.insert(0, '../') # doesn't make any difference
# sys.path.insert(0, '../module') # doesn't make any difference
# print(sys.path) # shows that testapp/ is in the path no matter if the two lines above are included or not
import module.App # doesn't work
class TestApp:
def test_add():
app = module.App()
assert app.add(1, 2) == 3
Когда я запускаю python -m pytest
в testapp/
(даже сказано, что он выполняется с root на testapp/
), я получаю сообщение об ошибке: ModuleNotFoundError: Нет модуля с именем 'module.App' .
Я пробовал module.app.App
с удалением кода в __init__.py
и без него. Я пробовал вставить .
и ..
и ../module
в путь перед импортом. Я пытался добавить __init__.py
s в testapp/
и / или в testapp/test
. Я пробовал добавить conftest.py
. Ничего не работает. Но это «Хорошие методы интеграции» ( цитата из pytest ), так что это должно работать.
Что я делаю не так? Что мне нужно сделать, чтобы он заработал?