LINUX.ORG.RU

python: unit-тесты и структура проекта

 , структура проекта,


1

2

Допустим что имеем: project/ source / fooA.py fooB.py tests/ testfooA.py testfooB.py Чтобы протестировать при помощи модуля unittest из стандартной библиотеки необходимо тестируемый модуль импортировать в скрипте с тестом, однако имеем такую проблему: просто import fooA не работает, что вполне логично, так как в папке с тестами модуля и нет, в PYTHONPATH модуля нет аналогично, решения, которые я видел:

  • либо извне проекта корректировать переменную окружения, но как-то лезть и для каждого проекта менять параметры окружения неочень хорошая мысль
  • Менять пути поиска и импорта программно через модуль sys. Но опять же это глобальные параметры и хотелось бы их трогать как можно меньше.
  • Свалить тесты и тестируемый код водну папку. Это, конечно, упрощает ситуацию, но рушит структуру и управляемость исходным кодом, а потому нехорошо.
  • Применять внешние утилиты для тестирования, как пишут интернеты, например, тот же nose вроде бы умеет решать проблему импорта. Впоне вариант, но может я просто не умею готовить стандартные средства, а потому и лезу за расширенными.

Еще насколько я поянл может помочь virtualenv, ведь она может же выставлять индивидуальный набор переменных окружения для каждого проекта. Итак как правильно и лучше организовать структуру проекта и решить проблему связи тестов и модулей

★★★★★

Ответ на: комментарий от anonymous

Читал такой вариант, спасибо однако, аноним. Но как-то не хочетсяправить пути, вариант выше мягче что ли к ним)

pylin ★★★★★
() автор топика
Ответ на: комментарий от der_looser

Да забыл я про эту хорошую волзможность

pylin ★★★★★
() автор топика

где-то читала, сейчас не могу найти, совет всегда запускать тесты из корневого каталога проекта, и использовать команду

python -m unittest discover

Тогда никакой дополнительной правки путей не потребуется.

alpha ★★★★★
()
Ответ на: комментарий от anonymous

Все получается, но просто, можно сказать не хочется мне модифицировать путь поиска модулей каждый раз ручками, хотя вполне решение, да.

pylin ★★★★★
() автор топика
Ответ на: комментарий от pylin

я правильно понимаю, вам хочется автоматизировать include source.fooX в соответствующем файле теста: tests/testfooX.py?

anonymous
()

С nosetest оно как-то само работает

maxcom ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.