2010-07-15 5 views
4

Я слышал об модульном тестировании и сам написал тесты самостоятельно, как тесты, но никогда не использовал никаких рамок тестирования. Теперь я пишу wxPython GUI для некоторых собственных библиотек анализа/визуализации данных. Я прочитал некоторые из очевидных результатов Google, например http://wiki.wxpython.org/Unit%20Testing%20with%20wxPython и его ссылку http://pywinauto.openqa.org/, но я все еще не знаю, с чего начать.Как выполнить тестирование wxPython?

У кого-нибудь есть опыт или хорошие ссылки для тех, кто знает теорию, но никогда не использовал ни одну из фреймворков и не знает, как это работает с графическими интерфейсами?

Я нахожусь на Windows-машине, разрабатывающей теоретически кросс-платформенное приложение, которое использует NumPy, Matplotlib, пакет MPlot Newville и wxPython 2.8.11. Python 2.6 с планами 3.1. Я работаю на кучу ученых, поэтому нет внутренней политики тестирования модулей.

+0

Спасибо за отличные ответы. Сегодня я рассмотрю PyPubSub, unittest/нос и более чистое разделение MVC. – Wang

ответ

1

Если вы хотите единица -test ваше приложение, вы не должны сосредоточиться на методах тестирования графического интерфейса. Гораздо лучше написать приложение, используя MVC, MVP или другие мета-шаблоны, подобные этим. Таким образом, вы разделяете бизнес-логику и слой представления.

Гораздо важнее охватить бизнес-уровень испытаниями, так как это ваш код. Уровень представления уже протестирован разработчиками wxWidgets. Для тестирования бизнес-уровня достаточно просто базовых инструментов, таких как стандартный модуль unittest и, возможно, nose.

Чтобы убедиться, что все приложение работает правильно, вы должны добавить несколько тестов acceptance, которые будут проверять функциональность от конца до конца. Они будут иметь дело с графическим интерфейсом, но таких тестов будет мало, по сравнению с количеством модульных тестов.

Если вы ограничите себя только приемочными испытаниями, вы получите низкое покрытие, хрупкую и очень медленную базу тестового кода.

+0

Возможно, я злоупотребляю терминологией здесь. Бизнес-логика --- как строить данные XAFS и т. Д. - уже написана. Я был привлечен специально, чтобы нарисовать красивые меню сверху, поэтому почти весь мой код // является // уровнем представления и типами ошибок, которые я ищу, чтобы уловить такие вещи, как я забыл перерисовать холст, чтобы новый сюжет не появляется, пока пользователь не изменит размер окна? Или я неправильно понимаю, что означает уровень представления? – Wang

+0

Автоматическое тестирование красивости и визуальной корректности - сложная задача. В случае изменения размера холста было бы лучше проверить Presenter/Controller, настроенный с помощью mock canvas: вызовите 'my_presenter.handle_button_x_click', а затем' assert my_presenter.canvas.redraw.called'. – nkrkv

1

Для модульного тестирования вашего приложения, не требуя много штучных объектов/заглушек, обработчики событий вашего GUI должны в основном делегировать другим вызовам метода, передавая значения из объекта Event в качестве параметров делегированному методу.

В противном случае вы не сможете протестировать свое приложение, не издеваясь над объектами wx.

Взгляните на проект PyPubSub для создания большого модуля, который поможет с MVC.

0

В одном из ранних моих проектов я действительно тестирую приложение wxPython с использованием слоя GUI. Поэтому тесты действительно закручивают живой объект wxApp, всплывают реальные окна, а затем начинают возиться с реальным MainLoop(). Очень скоро я понимаю, что это неправильный способ провести тестирование. Мои тесты проводились очень медленно и ненадежно. Гораздо лучший способ - отделить GUI-материал и проверить только «модельный» уровень вашего приложения. Обратите внимание, что вы действительно можете создать модель для логики уровня представления (модель, представляющая некоторую визуальную часть вашего приложения) и протестировать ее. Но эта модель не должна включать никаких «реальных» объектов gui (окон, диалогов, виджетов).

+1

Это, по-видимому, ответ по умолчанию. интеграционное тестирование графических приложений. Если у вас большое приложение, это отличный способ поймать такие проблемы, как «Диалог xy не открывается», «Кнопка xy (не) отключена», особенно с утиным набором текста, как в Python. Добавление другого уровня просто сдвигает проблему. К сожалению, я не знаю ничего подобного http://www.froglogic.com/squish/gui-testing/ для wxPython. Я все еще сталкиваюсь с Tracebacks после модульного тестирования, ручного тестирования и развертывания, и я ненавижу его. Поэтому я продолжаю изучать что-то вроде squish, dogtail или fest для wxPy безрезультатно :-( – Bluehorn

Смежные вопросы