В настоящее время я достаточно глуп, чтобы попытаться сохранить две параллельные базы кода для настольного приложения Python, используя интроспекцию PyGObject для GTK 3 и один с использованием PyGTK для GTK 2. Я работаю в основном на ветке PyGObject, а затем меняю изменения порта к филиалу PyGTK. Из-за всех незначительных различий между этими реализациями я часто упускаю из виду вещи и выхожу из-за поломки, которую я пропускаю и случайно освобождаю, только чтобы быть пойманным пользователями.
Я пытаюсь найти хороший способ разработки некоторых unittests, которые, желательно, будут пригодны для работы на обеих базовых кодах. Это не слишком сложная программа (это, по сути, инструмент управления библиотекой, представить себе как 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. Сама библиотека обрабатывается другим классом. Тем не менее, есть взаимодействия между виджетами, которые необходимо протестировать. Например, если пользователь выбирает конкретный элемент в представлении фильтра, фильтруя библиотеку, а затем выбирает элемент из отфильтрованных результатов, текстовое представление должно отображать информацию для правильной записи в библиотеке, которая является полусложной из-за перевода итераторы между TreeModelFilter и исходным ListStore и т.д. и т.д.
Итак, я спрашиваю, каков рекомендуемый способ написания надежных модульных тестов для такого приложения GUI? Я видел, что для этого есть несколько библиотек, но основные для pygtk не обновлялись годами, и поэтому они почти наверняка потерпят неудачу с самоанализом PyGObject. Возможно, я недостаточно творческий, чтобы понять, как это сделать, используя модуль Python unittest
, поэтому я открыт для предложений.