Импорт исходных файлов в тестовый файл - PullRequest
0 голосов
/ 30 мая 2019

У меня следующая структура каталогов:

Project
├── README.md
├── app
│   ├── __init__.py
│   └── main.py
│   
├── tests
│   ├── __init__.py
│   └── test_one.py

Я хочу импортировать app.main в test_one.Я прошел похожие вопросы по stackoverflow и попытался добавить путь к папке приложения в файле test_one.py следующим образом:

sys.path.append('/path to project/app')

Однако я получаю следующую ошибку:

ModuleNotFoundError: Нет модуля с именем app

Как импортировать файлы из приложения в файл test_one.py?Есть ли простое from ... import утверждение для достижения этой цели?

1 Ответ

0 голосов
/ 04 июня 2019

Вы не упомянули, какую платформу модульного тестирования вы используете, но если вы используете pytest , она уже поддерживает такую ​​организацию приложений / тестов, где тесты находятся за пределами кода приложения .

setup.py
mypkg/
    __init__.py
    app.py
    view.py
tests/
    test_app.py
    test_view.py
    ... 
  • ..
  • Если у вас нет файла setup.py и вы полагаетесь на тот факт, что Python по умолчанию помещает текущий каталог в sys.path для импорта ваш пакет, вы можете выполнить python -m pytest для выполнения тестов против локальной копии напрямую, без использования pip.

Ваши коды уже правильно структурированы. Вам не нужно вручную устанавливать sys.path. Вы можете использовать from app import main как обычно (см. Мой образец test_one.py ниже). Единственное, что я хотел бы добавить, это pytest.ini , чтобы указать пути тестирования и шаблон для тестовых файлов.

структура каталогов :

Project
├── pytest.ini
├── app
│   ├── __init__.py
│   └── main.py
│   
├── tests
│   ├── __init__.py
│   └── test_one.py

pytest.ini

[pytest]
addopts = -v
console_output_style = count
python_files = test_*.py
testpaths = tests

образец main.py :

def calculate(x, y):
    return x + y

образец test_one.py :

from app import main

def test_calculate():
    assert(3 == main.calculate(1, 2))

работает pytest:

$ pytest tests
=============================================================================== test session starts ===============================================================================
platform linux -- Python 3.7.2, pytest-4.6.2, py-1.8.0, pluggy-0.12.0 -- /home/gino/.virtualenvs/test-py37/bin/python3.7
cachedir: .pytest_cache
rootdir: /home/gino/Project, inifile: pytest.ini, testpaths: tests
collected 1 item                                                                                                                                                                  

tests/test_one.py::test_calculate PASSED                                                                                                                                     [1/1]

============================================================================ 1 passed in 0.01 seconds =============================================================================
...