структура и импорт модульных тестов - PullRequest
0 голосов
/ 21 мая 2018

Я хочу знать, как правильно импортировать файл в мой тестовый файл, не используя __init__.py в тестовой корневой папке.Последнее предложение этой статьи гласит, что в каталоге test не должно быть файла init.

Я не знаю много о питоне, поэтому мне хотелось бы знать: 1) Почему бы не 2) Как импортировать файл tested.py в test_main.py, чтобы проверить его функциональность без использования initфайл как скрипт, который вставляет пути к PYTHONPATHS?Мой проект имеет следующую структуру

.
├── __init__.py
├── my
│   ├── __init__.py
│   ├── main.py
│   └── my_sub
│       ├── __init__.py
│       └── tested.py
└── test
    └── test_main.py

Файлы содержат следующий код

#/Python_test/__init__.py
import my.main

#/Python_test/my/__init__.py
#empty

#/Python_test/my/main.py
from .my_sub.tested import inc
print(inc(5))

#/Python_test/my/my_sub/__init__.py
#empty

#/Python_test/my/my_sub/tested.py
def inc(x):
    return x+1

#/Python_test/test/test_main.py
from Python_pytest.my.my_sub.tested import func
def test_answer():
    assert func(3) == 3

Когда я запускаю код из командной строки python __init__.py, он печатает 6, что правильно.

Я бы хотел проверить функцию inc() в файле tested.py.1. Я установил pytest пакет в качестве среды тестирования,
2. создал тестовый файл, похожий на тот, что описан в руководстве здесь и называется test_main.py.3. Добавлен __init__.py с кодом, который находит путь к корневому каталогу и добавляет его к sys.path

. Он работал хорошо, но потом я прочитал, что этого делать не следует.Но как это сделать?Мне трудно читать какой-то проверенный модулем код из некоторых репозиториев github, которые протестированы и не используют файл инициализации.(один из них boto3 ) Я не могу найти подсказку, которая подсказывает, как правильно его использовать.

Я также пытался использовать относительный импорт таким образом

from ..my.main import func

но бросает ValueError: attempted relative import beyond top-level package. Что нормально.Но я все равно попробовал.

Теперь я не знаю, как это сделать.В руководствах по импорту обычно указывается, что мы должны добавить пути к импортированным модулям в sys.path (если их еще нет), но как мне это сделать, если не должно быть файла init, который может содержать функциональность?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...