Структура папок и проблемы с импортом в Pytest - PullRequest
0 голосов
/ 10 октября 2018

Представьте простую структуру папок:

my_folder/
    __init__.py
    funcs.py
    tests/
        test_funcs.py

funcs.py:

def f():
    return 2

__ init__.py:

from funcs import f

test_funcs.py:

from funcs import f

def test_f():
    assert f() == 2

Это один из предложенных способов в документации: https://pytest.readthedocs.io/en/reorganize-docs/new-docs/user/directory_structure.html

Но когда я запускаю pytest изmy_folder:

tests/test_funcs.py:1: in <module>
    from funcs import f
E   ModuleNotFoundError: No module named 'funcs'

Это странно, потому что я подумал бы, что pytest задает путь, с которого он работает, поэтому ошибки такого рода не возникают без ручной обработки.

Документация также не дает никаких указаний на это ... Они просто говорят:

Обычно вы можете запускать тесты, указывая на каталоги тестов или модули:

pytest tests/test_appmodule.py      # for external test dirs
pytest src/tests/test_appmodule.py  # for inlined test dirs
pytest src                          # run tests in all below test directories
pytest                              # run all tests below current dir

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вот очень простой способ:

  1. Очистить __init__.py
  2. С уровня выше my_folder запустить python -m pytest или python -m pytest tests (но не pytest)

ОБЪЯСНЕНИЕ: Запуск модуля с параметром -m включит его в PYTHONPATH, поэтому все, что связано с операторами импорта, будет решено без проблем.

0 голосов
/ 10 октября 2018

Тестовый файл test_funcs.py должен быть запущен из каталога, в котором расположен модуль funcs, для успешного импорта.

В качестве обходного пути вы можете изменить sys.path, который определяет путь поиска интерпретатора для модулей.

test_funcs.py:

import sys
sys.path.append('/Users/Yahya/Desktop/my_folder')

from funcs import f

def test_f():
    assert f() == 2
...