Внутрипакетные ссылки в тестах Python и GUI
У меня проблема с пакетами и тестированием 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, - это если основной / запущенный модуль находится дальше в дереве.
Итак, как мне структурировать эти типы тестов? Для модульных тестов я использую нос, который хорош и заботится о проблеме, так как нос запускается в папке mainapp (так что все ссылки внутри пакета работают). Но эти тесты похожи на небольшие автономные программы. Я просто не могу загромождать папку mainapp этими файлами python (таких файлов будет много). Есть ли другой способ, которым я могу сделать это?
Любой вклад является ценным.
Спасибо Рикард
1 ответ
Вы могли бы использовать 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