2009-03-23 4 views
5

Juste googling 'TDD' et 'GWT' conduisent facilement à this article où l'auteur a expliqué comment il peut tester une application GWT sans un conteneur. Cependant, je pense que son exemple n'est pas axé sur les tests car il a tout d'abord tout le design et ensuite écrit le test après, pas "test-first". Cela m'amène à penser: est-il possible d'avoir un développement «test-first» sur une interface utilisateur comme GWT? Certaines personnes ont déclaré que le code d'interface utilisateur ne convient pas à TDD. Mais je pense qu'en adoptant le modèle MVC, peut-être pouvons-nous au moins tester la partie MC? (donc V est la partie de l'interface utilisateur qui ne peut pas être développée en fonction des tests).Comment tester le développement de GWT?

Quel sera le premier test échoué que nous écririons sur l'exemple de l'article?

Répondre

14

L'interface utilisateur de test de conduite est problématique car vous ne savez souvent pas ce que vous voulez sur l'écran tant que vous ne le voyez pas à l'écran. Pour cette raison, le développement de l'interface graphique a tendance à être massivement itératif et donc très difficile à conduire avec des tests. Cela ne veut pas dire que nous abandonnons simplement TDD pour les interfaces graphiques. Au contraire, nous poussons autant de code que possible hors de l'interface graphique, ne laissant derrière que du code de câblage simple. Ce câblage nous permet de faire les changements massivement itératifs dont nous avons besoin, sans affecter l'essence du problème.

Cette technique a probablement été décrite par Michael Feathers il y a quelques années dans un article intitulé "The Humble Dialog Box". C'est aussi l'idée fondamentale derrière le modèle Model-View-Presenter qui a causé une telle agitation il y a quatre ans; et a maintenant été divisé en modèles Passive View et Supervision Controller. Le lien de l'article dans cette question profite de ces idées, mais d'une manière test-après plutôt que d'un test.

L'idée est de tester tout sauf la vue. En effet, nous n'avons même pas besoin d'écrire la vue depuis longtemps. En effet, le View est si simplement absurde qu'il n'a probablement pas besoin de tests unitaires. Ou si c'est le cas, ils peuvent en fait être écrits en dernier.

Pour tester le contrôleur de supervision, vous devez simplement vous assurer que vous comprenez comment les données seront présentées à l'écran. Vous n'avez pas besoin de savoir où sont les données, ni quelle est la police, ou de quelle couleur il s'agit, ni aucun des autres problèmes esthétiques qui provoquent l'itération massive des interfaces graphiques. Au contraire, vous savez qu'un élément de données sera une sorte de champ de texte. Un autre sera un menu, encore un autre sera un bouton ou une case à cocher. Ensuite, vous vous assurez que la vue peut poser toutes les questions dont elle a besoin pour obtenir ces éléments correctement.

Par exemple, la zone de texte peut avoir une valeur par défaut. La vue devrait pouvoir le demander. Le menu peut avoir des éléments grisés. La vue devrait pouvoir demander cette information. Les questions posées par la vue concernent toutes la présentation et sont dépourvues de règles métier. Du même coup, la vue indiquera au contrôleur de supervision quand quelque chose change. Le contrôleur modifiera les données de manière appropriée, y compris tout type de validation et de récupération d'erreur, puis la vue pourra demander comment ces données doivent être présentées.

Tout cela peut être piloté par le test car tout est découplé de l'affichage visuel. C'est tout sur comment les données sont manipulées et présentées, et pas à propos de quoi il ressemble. Il n'a donc pas besoin d'être massivement itéré.

3

J'ai testé avec succès le développement d'applications Swing et GWT via l'interface graphique.Le test «juste derrière l'interface graphique» ignore l'intégration entre le code du modèle et les composants de l'interface graphique. L'application doit raccorder des gestionnaires d'événements pour afficher des données dans l'interface graphique lorsque le modèle change et reçoit une entrée de l'interface graphique et met à jour le modèle. Tester que tous ces gestionnaires d'événements ont été connectés correctement est très fastidieux si cela est fait manuellement.

Le grand problème à surmonter lors du test via l'interface graphique est de savoir comment gérer les modifications de l'interface graphique au cours du développement.

GWT a des crochets pour vous aider. Vous devez définir les ID de débogage sur les widgets GWT et importer le module DebugID dans votre application. Vos tests peuvent ensuite interagir avec l'application en contrôlant un navigateur Web, en trouvant des éléments par leur identifiant et en cliquant dessus ou en y introduisant du texte. Web Driver est une très bonne API pour cela.

Mais ce n'est qu'un début. Vous devez également découpler vos tests de la structure de l'interface graphique: comment l'utilisateur navigue-t-il dans l'interface utilisateur pour effectuer le travail. C'est le cas si vous testez via l'interface graphique ou derrière l'interface utilisateur graphique par rapport au contrôleur. Si vous testez par rapport au contrôleur, le contrôleur dicte la façon dont l'utilisateur navigue dans les différentes vues de l'application, et ainsi votre test est couplé à cette structure de navigation car il est couplé au contrôleur. Pour répondre à cela, nos tests contrôlent l'application à travers une hiérarchie de "drivers". Les tests interagissent avec les pilotes qui le laissent effectuer des activités axées sur l'utilisateur, telles que la connexion, la saisie d'une commande et le paiement. Le pilote capture la connaissance de la façon dont ces tâches sont effectuées en naviguant et en entrant des données dans l'interface graphique. Pour ce faire, il utilise des pilotes de niveau inférieur qui capturent la manière dont la navigation et la saisie des données sont effectuées par des «gestes», par exemple en cliquant sur un bouton ou en saisissant du texte dans un champ de saisie. Vous vous retrouvez avec une hiérarchie comme:

  • Objectifs de l'utilisateur: les tests vérifient que l'utilisateur peut atteindre leurs objectifs avec le système et montre comment ces objectifs sont atteints par une séquence de ...
  • Activités de l'utilisateur: Les choses que l'utilisateur fait à travers l'interface graphique, représentés comme des ...
  • Gestes: entrée de souris et de clavier de bas niveau pour contrôler l'interface graphique.

Cette hiérarchie est souvent utilisée dans la littérature de conception centrée sur l'utilisateur (bien que sa terminologie soit différente).

Questions connexes