Esprit Libre

Blog sur Java/J2EE, l’Open Source & le Libre et l’actualité IT…

GWT et les tests unitaires rapides

Geek

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 »

Soyez le premier à commenter ce billet !
Langue : [Français] 

No Translations

Maven et NetBeans, un duo qui marche

Geek

Comme annoncé dans un précédent article, 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 »

1 commentaire »
Langue : [Français] 

No Translations

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

Geek

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 ?

Soyez le premier à commenter ce billet !
Langue : [Français] 

No Translations

XPlanner, Spring et JDK 1.6

Geek, Libre & Open Source

Juste un petit article sur un problème que j’ai rencontré hier… Certains connaissent peut être l’outils de gestion de projets agiles XPlanner (orienté eXtreme Programming selon le site du projet).
La dernière version date de mai 2006 et n’a été testée qu’avec des version de JDK 1.4.2. Cependant la JVM a évoluée depuis… En tentant de faire fonctionner XPlanner sur un serveur doté d’un tomcat 5.5 et surtout d’un JDK 1.6 on obtient une belle stack d’erreur au lancement de l’application, dont la partie significative est :
org.springframework.beans.TypeMismatchException: Failed to convert property value of type [org.apache.commons.collections.map.LinkedMap] to required type [java.util.HashMap] for property 'repositories'

La solution est de modifier le fichier de configuration de spring WEB-INF/classes/spring-beans.xml en remplaçant : Lire la suite »

6 commentaires »
Langue : [Français] 

Other Languages:

Threadlocal avec Grails

Geek

Un des gros avantage de Groovy avec Java c’est que l’on peut quasiment reprendre la totalité d’un projet Java sans y toucher et qu’il soit compatible avec Groovy. Quasiment… c’est bien ce qui nous empêche de reprendre d’un simple copier-coller le Threadlocal sans générer une erreur de compilation.

Prenons un exemple d’utilisation en Java…

Lire la suite »

Soyez le premier à commenter ce billet !
Langue : [Français] 

No Translations