私は現在、Python デスクトップ アプリケーション用に 2 つの並列コード ベースを維持しようとするほど愚かです。1 つは GTK 3 用の PyGObject イントロスペクションを使用し、もう 1 つは GTK 2 用の PyGTK を使用しています。 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 から継承する他のクラスと結合されています。ライブラリ自体は別のクラスによって処理されます。それにもかかわらず、テストする必要があるウィジェット間の相互作用があります。たとえば、ユーザーがフィルタ ビューで特定のアイテムを選択してライブラリをフィルタリングし、フィルタリングされた結果からアイテムを選択した場合、テキスト ビューには正しいライブラリ エントリの情報を表示する必要がありますが、これは翻訳のためにやや複雑です。 TreeModelFilter と元の ListStore などの間の iters など。
では、そのような GUI アプリケーションの堅牢な単体テストを作成するための推奨される方法は何ですか? これにはいくつかのライブラリがあることがわかりましたが、pygtk の主要なライブラリは何年も更新されていないため、PyGObject イントロスペクションでほぼ確実に失敗します。おそらく私は、Python のモジュールを使用してそれを行う良い方法を見つけるほど創造的ではないunittest
ので、提案を受け付けています。