Question

Quel est le meilleur moyen de tester le code GWT?

GWTTestCase en mode hébergé est trop lent et aucun des frameworks moqueurs ne fonctionne.

Actuellement, nous suivons MVC comme suggéré dans http://robvanmaris.jteam.nl/2008/03/09/test-driven-development-for-gwt-ui-code/ et utiliser GWTMockUtilities désarmer () et restaurer () pour simuler des widgets . Et nous n'avons pas trouvé de moyen de tester View dans GWT MVC. Existe-t-il un meilleur moyen de tester le code GWT?

Était-ce utile?

La solution

Si vous souhaitez tester les widgets GWT de manière isolée, les options sont rares. Vous pouvez utiliser un GWTTestCase pour instancier vos widgets et le tester via son API, ce que Google fait pour les widgets GWT eux-mêmes: Source de RadioButtonTest

Cependant, le mécanisme de déclenchement d'événement ne fonctionne pas dans GWTTestCases, ce qui signifie que vous ne pouvez pas cliquer sur un bouton par programme et s'attendre à ce qu'une méthode de rappel onClick () soit invoquée sur un écouteur. Il est également difficile, voire impossible, d’obtenir le DOM sous-jacent, ce n’est donc peut-être pas le meilleur outil pour tester le code émettant en HTML de bas niveau.

On dirait que vous suivez toutes les bonnes étapes; L'article de Rob fournit une excellente description de la rédaction de code testable à l'aide du modèle de conception Model-View-Presenter (MVP). Plus vous éviterez la logique hors de la couche de vue, mieux ce sera. Lorsque ce n'est pas possible, utilisez un outil tel que Selenium pour créer des tests ciblés du comportement dynamique de l'interface utilisateur.

J'ai suivi une stratégie similaire: MVP avec un code minimal dans les widgets. Dans quelques cas, j'ai écrit du code qui engloberait la classe Grid. J'ai donc pu instancier mon composant dans un GWTTestCase, lui transmettre une grille, invoquer des méthodes sur mon composant et vérifier l'état de la grille. J'ai écrit un article pour Better Software sur Test-First GWT, que vous pouvez lire sur mon blog .

Si vous souhaitez tester du code utilisant des classes GWT non UI (telles que le codage d'URL ou les dictionnaires), vous devez utiliser GWTTestCase ou suivre des stratégies d'encapsulation similaires jusqu'à ce que le code soit trop simple pour être décomposé. Utilisez ensuite un test d’intégration avec un outil tel que Selenium, ou quelques cas GWTTestCases ciblés qui vérifient uniquement que vous utilisez correctement la bibliothèque - comme le dit J.B. Rainsberger, "Ne testez pas le cadre!"

Autres conseils

En guise d'alternative, vous devriez essayer gwt-test-utils , qui parviennent à exécuter le code client GWT dans une machine virtuelle Java autonome et fournit certaines fonctionnalités permettant de simuler tout ce que vous voulez (composant, services RPC, etc.)

Ce qui a fonctionné pour moi:

Utilisez un modèle / vue / contrôleur classique (par exemple, aucune logique métier dans la vue ou le contrôleur; les contrôleurs traduisent uniquement les événements de vue en appels de méthode sur le modèle).

Découplez le code de modèle et le code de contrôleur des widgets de vue GWT et de toutes les autres classes qui dépendent de GWT et ne peuvent pas être instanciées dans une ancienne machine virtuelle Java. Vous pouvez ensuite les tester avec le bon vieux JUnit.

Ecrivez des tests de bout en bout pour tester le système via l'interface graphique afin de vous assurer que les modèles et les contrôleurs sont correctement connectés aux vues. Nous avons constaté qu'il était plus rapide de déployer et de démarrer l'application, puis d'interagir avec celle-ci via un navigateur contrôlé depuis JUnit avec WebDriver plutôt que d'utiliser GWTTestCase!

Utilisez JMock pour tester les appels asynchrones comme suit: http://www.jmock.org/gwt. html .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top