запускать юнит-тесты и покрытие в определенной структуре python - PullRequest
1 голос
/ 14 ноября 2009

У меня есть забавная проблема с нубами.

Я пытаюсь запустить модульные тесты из командной строки:

H:\PRO\pyEstimator>python src\test\python\test_power_estimator.py
Traceback (most recent call last):
  File "src\test\python\test_power_estimator.py", line 2, in <module>
    import src.main.python.power_estimator as power
ImportError: No module named src.main.python.power_estimator

то же самое происходит, когда я пытаюсь запустить его в нужной папке:

H: \ PRO \ pyEstimator \ SRC \ Test \ питон> питон test_power_estimator.py

Моя структура папок выглядит следующим образом.

├───src
│   │   __init__.py
│   │   __init__.pyc
│   │
│   ├───main
│   │   │   __init__.py
│   │   │   __init__.pyc
│   │   │
│   │   └───python
│   │       │   __init__.py
│   │       │   power_estimator.py
│   │       │   __init__.pyc
│   │       │   power_estimator.pyc
│   │       │
│   │       └───GUI
│   │               __init__.py
│   │
│   └───test
│       │   __init__.py
│       │
│       └───python
│               test_power_estimator.py
│               __init__.py
│               covrunner.bat
│               .coverage
│
└───doc

Может быть, я не вижу ничего очевидного. Я также пытаюсь запустить освещение. Этот подход хорош (файловая структура)?

1 Ответ

1 голос
/ 14 ноября 2009

Непосредственной проблемой, с которой вы сталкиваетесь, является неправильное понимание того, что такое "локальный код" в Python (я не уверен, что существует официальная терминология, поэтому я ее формулирую) и как ее импортировать.

Когда вы запускаете python src\test\python\test_power_estimator.py, первый элемент в sys.path устанавливается в каталог, содержащий скрипт test_power_estimator.py, а не в текущий каталог. Таким образом, оператор «import src.main.python.power_estimator as power» ищет пакет src в каталоге src/test/python, и это не удается.

Один из способов обойти эту проблему - установить для переменной среды PYTHONPATH значение "H: \ PRO \ pyEstimator"

Но рекомендуемый способ запуска тестов - использовать скрипт запуска тестов. Я рекомендовал использовать Notest .

Кроме того, в тесте на носу есть поддержка сбора данных о покрытии во время выполнения тестов.

Кроме того, кажется плохой идеей иметь пакет python с именем "src". Вы должны переименовать ваш пакет в ваш проект. Может быть, "оценщик" или "пиестиматор" (пожалуйста, строчными буквами).

...