我目前愚蠢到试图为Python桌面应用程序维护两个并行代码基,一个使用PyGObject introspection for GTK 3,另一个使用PyGTK for GTK 2。我主要在PyGObject分支上工作,然后将变更移植到PyGTK分支上。由于这些实现之间的所有细微差异,我经常忽略一些东西,并导致我错过并意外发布的破坏,结果被用户发现。在
我正试图找到一种好的方法来设计一些单元测试,这些单元测试最好能在两个代码基上运行。想象一下,它本质上不是一个复杂的程序库:- 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继承的其他类耦合在一起。库本身由另一个类处理。尽管如此,小部件之间仍然存在需要测试的交互。例如,如果用户在filter视图中选择了一个特定的项目,过滤了库,然后从过滤的结果中选择了一个项目,那么文本视图必须显示正确的库条目的信息,由于在TreeModelFilter和原始ListStore之间转换iter等,这是半复杂的
所以,我问,为这样一个GUI应用程序编写健壮的单元测试的推荐方法是什么?我已经看到有一些库用于这一点,但是pygtk的主要库已经多年没有更新了,因此它们几乎肯定会在PyGObject自省中失败。也许我没有足够的创造力来想出一个使用Python的unittest模块的好方法,所以我愿意接受建议。在