Вопрос

У меня есть проблема, связанная с пакетами python и тестированием.Я пишу приложение, используя wx питон и иметь следующую базовую структуру папок / пакетов для частей графического интерфейса.В 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...

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

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 запускается в папке mainapp (так что все ссылки внутри пакета работают).Но эти тесты похожи на небольшие автономные программы.Я просто не могу загромождать папку mainapp этими файлами python (таких файлов будет много).Есть ли какой-нибудь другой способ, которым я могу это сделать?

Любой вклад ценен.

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

Это было полезно?

Решение

Вы могли бы использовать 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top