Bien externaliser la configuration de votre application est la clé qui ouvre les portes de l’automatisation des déploiements, du déploiement continu, des astreintes du dimanche sans appels des équipes de production, des transferts de connaissance de fin de mission sans lendemains, etc. À chaque fois qu’une application Web est déployée sur un environnement alors que sa configuration n’est pas externalisée, un chaton meurt ; externaliser vos conf est donc également une bonne action envers tous les chatons du monde.
Dans cet article, je vais commencer par rappeler rapidement les stratégies de reconfiguration que l’on peut croiser dans ce monde sauvage avec leurs avantages et leurs inconvénients. Je présenterai ensuite en détail une de ces stratégies, appliquée à une application web basée sur Spring. Les principes de cette stratégie peuvent être résumés par cette citation :
One WAR to package them all, One WAR to serve them all,
One WAR to deploy them all and in JNDI bind them.
Lire la suite de cet article »
Les DAO (Data Access Object) ou repository des applications contiennent souvent de l’information importante sur la façon dont les données d’une base doivent être consultées. Cette information prend la forme d’une logique métier qui est encodée dans un ou plusieurs langages, souvent un langage déclaratif (SQL, HSQL, JPQL, etc.) et un langage impératif (Java, Groovy, Scala, etc.).
Tester cette logique d’accès polyglotte peut s’avérer complexe et lent car ce type de test se prète mal aux techniques classiques de mock et nécessite plutôt l’écriture de tests d’intégration qui chargent une partie du contexte réel d’exécution. Par conséquent, les tests de cette couche sont parfois délaissés, voire abandonnés.
Cet article se propose de vous montrer comment réaliser de tels tests, avec un niveau d’isolation suffisant pour la parallélisation dans un processus multithread, tout en essayant de trouver le meilleur compromis avec le temps d’exécution de chaque test. Ces tests sont présentés dans une configuration très classique utilisant Spring et JPA/Hibernate.
L’implémentation utilise une base HSQLDB et quelques bibliothèques pour faciliter l’écriture du code, en essayant de rester aussi léger que possible. Les tests sont isolés pour que vous puissiez activer l’exécution parallèle du plugin Surefire de Maven au niveau des classes de test. Vous pourrez facilement dériver l’implémentation nécessaire à isoler vos tests au niveau des méthodes si vous le souhaitez.
Lire la suite de cet article »