В настоящее время я достаточно глуп, чтобы пытаться поддерживать две параллельные базы кода для настольного приложения Python, одну с использованием интроспекции PyGObject для GTK 3, а другую с использованием PyGTK для GTK 2. В основном я работаю над ветвью PyGObject, а затем переношу изменения в Филиал PyGTK. Из-за всех незначительных различий между этими реализациями я часто упускаю из виду вещи и вызываю поломки, которые я пропускаю и случайно выпускаю, только для того, чтобы их поймали пользователи.
Я пытаюсь найти хороший способ разработки некоторых модульных тестов, которые предпочтительно подходят для запуска на обеих базах кода. Это не слишком сложная программа (по сути, это инструмент управления библиотекой, представьте себе, как iTunes):
- Main Window
|- Toolbar with some buttons (add/edit/remove items, configure the program)
|
|- VPaned
|--- Top HPaned
|------ ListView (listing values by which a library of items can be filtered)
|------ ListView (listing the contents of the library
|--- Bottom HPaned
|------ Image (displaying cover art for the currently selected item in the library)
|------ TextView (displaying formatted text describing the currently selected item)
- Edit dialog
- Configuration dialog
- About dialog
Я пытался максимально отделить виды от моделей. Каждый из этих элементов реализован в своем собственном классе (ну, в классах, которые наследуются от перечисленных классов GTK). ListViews связаны с другими классами, которые наследуются от ListStores. Сама библиотека обрабатывается другим классом. Тем не менее, существуют взаимодействия между виджетами, которые необходимо протестировать. Например, если пользователь выбирает конкретный элемент в представлении фильтра, фильтруя библиотеку, а затем выбирает элемент из отфильтрованных результатов, текстовое представление должно отображать информацию для правильной записи библиотеки, что частично сложно из-за перевода. iters между TreeModelFilter и исходным ListStore и т. д. и т. д.
Итак, я спрашиваю, каков рекомендуемый способ написания надежных модульных тестов для такого приложения с графическим интерфейсом? Я видел, что для этого есть несколько библиотек, но основные из них для pygtk не обновлялись годами, поэтому они почти наверняка потерпят неудачу при самоанализе PyGObject. Возможно, я недостаточно изобретателен, чтобы найти хороший способ сделать это с помощью модуля Python unittest
, поэтому я открыт для предложений.