Модульное тестирование всей иерархии проекта в Python с использованием unittest в pydev - PullRequest
4 голосов
/ 09 февраля 2012

Я использую модуль unittest для модульного тестирования некоторого кода Python, который был создан в иерархической структуре пакетов с использованием Pydev. Проблема возникает, когда я пытаюсь использовать отдельные исходные папки для реального исходного кода и его модульного тестирования в pydev.

project
  |----src
  |     |----com
  |     |     |----myself
  |     |     |       |----MyApplication
  |     |     |       |          |----SampleFileToTest.py  => The application file that I want to test
  |----test
  |     |----com
  |     |     |----myself
  |     |     |       |----MyApplication
  |     |     |       |          |----TestTheSampleFileToTest.py  => My test case file

Поскольку я пытаюсь разделить иерархии, у меня возникают проблемы при обращении к файлу приложения в тестовом файле. Можно ли пойти по пути Junit, то есть с использованием разных исходных папок, но с тем же именем пакета?

1 Ответ

2 голосов
/ 09 февраля 2012

Это не поддерживается по умолчанию в самом Python (то есть: ничего общего с PyDev) - я также пришел из Java-фона, поэтому, возможно, вам придется забыть некоторые из ваших концепций Java здесь:)

В Python, когда папка с __init__.py найдена, этот пакет больше не будет искать по другим путям.Я думаю, что у setuptools есть некоторые хакеры, чтобы заставить это работать, и я смутно помню, что Python 3 может добавить некоторую поддержку, но пока я не думаю, что это вообще рекомендуется ... Это немного отличается от подхода Java - вPython, flat лучше, чем вложенный - может быть, вы знаете, но в противном случае, просто для удовольствия, запустите сеанс интерпретатора Python и выполните «import this»:)

Т.е.: короче, как только my_app/__init__.py найден, он не будет пытаться разрешить подпапки my_app в любом другом месте в PYTHONPATH

Итак, у вас есть 2 подхода ... Обычно я делаю так, чтобы тесты были близки к модулю в пакете _tests.Т.е.:

/project
/project/src
/project/src/myapp
/project/src/myapp/__init__.py
/project/src/myapp/_tests
/project/src/myapp/_tests/__init__.py
/project/src/myapp/_tests/test_myapp.py

И другой подход (который, я должен сказать, мне нравится немного меньше, так как тесты «чувствуют» себя более отделенным от кода), будет иметь отдельный пакет для тестов:

/project
/project/src
/project/src/myapp
/project/src/myapp/__init__.py
/project/src/myapp_tests/__init__.py
/project/src/myapp_tests/test_myapp.py
...