Je suis actuellement assez fou pour essayer de maintaintain en parallèle les deux bases de code pour un Python application de bureau, en utilisant un PyGObject introspection pour GTK 3 et une à l'aide de PyGTK pour GTK 2. Je travaille principalement sur la PyGObject branche et puis j'port de changements au cours de la PyGTK branche. En raison de toutes les différences mineures entre ces implémentations, je négligent souvent les choses et de provoquer des ruptures qui me manque et accidentellement de presse, que d'être pris par les utilisateurs.
Je suis à essayer de comprendre une bonne façon de concevoir certains unittests qui serait, de préférence, être adapté pour fonctionner sur les deux bases de code. Il n'est pas trop compliqué programme, (il s'agit essentiellement d'une bibliothèque de gestion de l'outil, imaginez comme 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
J'ai essayé de séparer les points de vue à partir de modèles autant que possible. Chacun de ces éléments est mis en œuvre dans sa propre classe (ainsi, dans les classes qui héritent de la GTK classes inscrites). Les ListViews sont couplés avec d'autres classes qui héritent de ListStores. La bibliothèque est gérée par une classe différente. Néanmoins, il existe des interactions entre les widgets qui doivent être testés. Par exemple, si l'utilisateur sélectionne un élément particulier dans la vue filtre, filtrage de la bibliothèque, puis sélectionne un élément dans les résultats filtrés, l'affichage de texte doit afficher les informations pour la bonne entrée de la bibliothèque, qui est semi-complexe en raison de la traduction que ces dossiers entre TreeModelFilter et l'original ListStore, etc etc.
Donc, je le demande, quelle est la méthode recommandée pour l'écriture robuste unité de tests pour une application GUI? J'ai vu qu'il existe des bibliothèques pour cela, mais les principaux d'entre eux pour pygtk n'ont pas été mis à jour dans années, et ils seront presque certainement un échec avec PyGObject introspection. Peut-être que je ne suis pas assez créatifs pour trouver une bonne façon de le faire à l'aide de Python unittest
module, donc je suis ouvert aux suggestions.