Внутрипакетные ссылки в тестах Python и GUI - PullRequest
1 голос
/ 29 марта 2010

У меня проблема с пакетами и тестированием python. Я пишу приложение с использованием wx python и имею следующую базовую структуру папок / пакетов для частей графического интерфейса. Окно mainframe.py зависит от панели logpane.py , которую легко импортировать с помощью абсолютного импорта в mainframe.py :

import guiapp.utilviews.logpane

Расположение папки / пакета:

mainapp
   - main.py
   guiapp
       - __init__.py
       utilviews
           - __init__.py
           - logpane.py
           - other stuff...
       mainview
           - __init__.py
           - mainframe.py
           - other stuff here...
       other views...

Однако для частей графического интерфейса приложения, которые я хотел бы, в дополнение к модульным тестам (и они не создают проблем), есть небольшой «тест» / пример для каждого представления. То есть для журнала я хотел бы иметь небольшой исполняемый пример, который будет запускать приложение с «голыми костями», показывающее представление для проверки правильности макета и т. Д. Я начал с того, что у меня был

if __name__ == "__main__":
    # create some small window and a wx app
    # instanciate the panel and launch the app
    pass

в фактическом файле реализации панели / самого просмотра. Это творило чудеса для журнала. Я мог бы просто запустить файл автономно, чтобы взглянуть на вид и увидеть, что он скреплен.

Но, конечно, стратегия для mainframe.py не работает, так как зависимость от logpane.py не может быть разрешена. Это связано с тем, что текущий основной модуль является mainframe.py, и единственный способ, которым mainframe.py может получить доступ к пакету utilviews, - это если основной / запущенный модуль находится дальше в дереве.

Так как мне структурировать эти типы тестов? Для модульных тестов я использую nose , что приятно и решает проблему, так как nose запускается в папке mainapp (так что все ссылки внутри пакета работают). Но эти тесты похожи на небольшие автономные программы. Я просто не могу загромождать папку mainapp этими файлами python (таких файлов будет много). Есть ли другой способ сделать это?

Любой вклад является ценным.

Спасибо, Рикард

1 Ответ

2 голосов
/ 29 марта 2010

Вы можете использовать PYTHONPATH. Установите его в основной каталог проекта, прежде чем выполнять тестовый файл. После этого он сможет разрешить все ваши операции импорта так же, как если бы вы выполняли его из этого каталога.

$ find
.
./test
./test/test.py
./some
./some/__init__.py

$ cat some/__init__.py 
x = 10

$ cat test/test.py 
import some
print some.x

$ cd test
$ export PYTHONPATH=..
$ python test.py
10
...