On en a beaucoup parlé lors de sa sortie, on en parle encore maintenant avec la sortie de Google Wave, il s’agit de GWT (Google Web Toolkit).
Rapidement : GWT c’est coder du Javascript en Java, ce qui permet de faire « facilement»  de l’Ajax avec des gens qui maîtrisent bien ce langage (plus que JS en tout cas…).

Bref, nous ne sommes pas ici pour parler de GWT tout seul mais plutôt de la façon dont on écrit des tests pour cette technologie. Armé de notre JUnit favoris et de Mocks en tout genre (pour Spring, pour les Web Services, tout ça…) nous sommes pourtant démunis face à GWT. En effet dès l’écriture du premier test unitaire (qui ne ferait que créer un objet par exemple) nous avons une erreur de ce type :
java.lang.ExceptionInInitializerError
[...]
Caused by: java.lang.UnsupportedOperationException: ERROR: GWT.create() is only usable in client code! It cannot be called, for example, from server code. If you are running a unit test, check that your test case extends GWTTestCase and that GWT.create() is not called from within an initializer or constructor.
at com.google.gwt.core.client.GWT.create(GWT.java:91)
at com.google.gwt.user.client.ui.UIObject.(UIObject.java:139)
... 23 more

Ok, pas très grave puisqu’apparement Google y a pensé et nous donne même la solution : on étends la classe GWTTestCase, on refait la même chose et ça devrait marcher. Et c’est vrai ça marche, alors où est le problème ? Le problème c’est que GWT a besoin de lancer son navigateur pour exécuter les tests et que c’est gourmand en ressources et en temps d’exécution (ceux qui font des tests avec un contexte Spring complet savent de quoi je parle).

Hors je travaille sur des projets en méthodologie Agile (avec du TDD dedans), et la fréquence de passage des tests unitaires est très élevée. Contrairement aux tests d’intégration qui sont exécutés moins souvent, le passage des tests unitaires fait partie du processus de création du code, il est donc impensable d’attendre 10 à 15 secondes que le test veuille bien se lancer alors qu’on peut en avoir besoin plusieurs fois par minute !
Lire la suite »