GWT et les tests unitaires rapides

11 juin 2009

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 de cette entrée »

Maven et NetBeans, un duo qui marche

5 septembre 2008

J’ai testé Maven avec NetBeans pour constater l’état de l’intégration entre ces deux outils. Autant le dire tout de suite, celui ci n’a rien à voir avec celui d’Eclipse : c’est le jour et la nuit !
Cela faisait en fait plusieurs années que je n’avais pas testé cet IDE (ça remonte avant même la sortie d’Eclipse 3.0 !) et la prise en main après toutes ces années d’Eclipse a été déroutante. Je n’ai pas retrouvé tous mes raccourcis, mais voilà un mois que j’utilise cet IDE sans envie de revenir en arrière !

L’installation du plugin Maven pour Netbeans se fait simplement via l’interface d’ajouts de plugins, sans ajouter de dépot particulier. Une fois installé, on a l’impression que l’IDE n’a jamais été conçu autrement que pour travailler sur des projets Maven. Je passe sur l’import (simplissime) d’un projet Maven qui n’est pas l’objet de cet article…

Une fois un projet ouvert (avec des modules tant qu’à faire) toute l’interface et les menus s’adaptent au projet Maven. En dépliant le projet parent, on découvre une liste de modules, les librairies rangées par scope, et les répertoires habituels de sources, de tests et le reste…

Lire la suite de cette entrée »

Base de données H2, la relève de HSQLDB ?

20 août 2008

Le créateur de Hypersonic SQL, Thomas Mueller, se replonge dans la création d’une base de données légère avec H2 (enfin ça remonte au moins à 2007).

Comme HSQL, les points forts de cette BDD sont une faible empreinte mémoire et un mode embarqué très performant. Les graphiques du site officiel sont d’ailleurs assez révélateurs sur les performances que l’on est en droit d’attendre de ce produit…

Graphes de performances

Operations/second (détails)

Un problème tout de même… Alors qu’une grande quantité d’applications JEE utilise Hibernate pour la persistance, le dialecte relatif à H2 est bugué. Cette petite classe est responsable de la traduction du code Hibernate en requêtes SQL. Un problème qui n’est toujours pas adressé malgré la sortie de la version 3.3 du framework alors qu’un patch est disponible depuis un certain temps déjà…

J’aimerais beaucoup l’utiliser pour le projet sur lequel je travaille en ce moment, mais je préfère attendre la prise en compte du patch… Est ce que quelqu’un a des retours sur l’utilisation de cette base de données dans la vrai vie ?