Bonjour à tous !
Je suis en train de développer une application web. Pour l'instant, j'ai fait le design de la base de donnée, et généré les POJO ainsi qu'une DAO sommaire à l'aide du plugin Hibernate Tools d'Eclipse.
En lisant un peu différents livres et références sur le développement avec Hibernate, j'ai appris qu'il était conseillé d'utiliser une base de données en mémoire pour les tests (par exemple HSQLDB), ce qui est je trouve la solution idéale pour des tests unitaires.
Par contre, j'ai quelques soucis concertant l'organisation du tout. Pour l'instant, j'ai un projet contenant mon application, avec ses POJOs, les fichiers de mapping, la DAO et le métier (enfin, le peu que j'ai déjà fait ). J'ai aussi la configuration d'hibernate, qui est celle de dev, à savoir qui pointe sur ma base PostgreSQL.
J'ai ensuite un deuxième projet (je bosse avec Eclipse) qui contient tous les tests unitaires. Si je les ai séparés dans deux projets, c'est parce que c'était à mon avis plus propre et plus pratique à organiser. Mais peut-être que je me trompe... Ce deuxième projet a une référence vers le premier (pour pouvoir utiliser les classes) et son propre fichier hibernate.cfg.xml (qui liste aussi les fichiers de mapping), qui lui pointe vers la base de données HSQLDB, uniquement utilisée pour les tests unitaires, qui est recréée à chaque run.
Que pensez-vous de cette organisation ? Elle me semble un peu bizarre, dans le sens où j'ai l'impression que je m'emmèle les pinceaux entres les deux configurations. J'ai en effet une classe HibernateUtils, dans chaque projet, qui me permet d'accéder à la SessionFactory associée à la config. Le problème, c'est que dans le projet "normal", les classes utilisent le HibernateUtils du projet normal, qui à mon avis doit utiliser la config de dev, même lors des tests. Tandis que dans le projet de test, les classes de test utilisent le HibernateUtils qui utilise la config de test (comme voulu).
Et ce n'est pas vraiment ce que je voudrais que ça fasse...
Bref, ce n'est peut-être pas trop clair. Je vais donc vous reformuler mes souhaits :
- J'aimerais un projet de dev, qui a sa config de dev (donc qui pointe vers une base PostgreSQL), et que je peux lancer indépendamment pour le dev (et à terme déployer en prod en changeant juste la config, enfin on se comprends !)
- J'aimerais un projet de tests unitaires, qui a accès à tout le contenu du projet de dev (ben oui, pour le tester ), mais qui a sa propre config hibernate qui pointe vers une DB en mémoire, qui est vidée à chaque nouvelle session de tests.
- Et j'aimerais donc que le projet de dev utilise sa config à lui lorsqu'il est seul, mais que lorsqu'on appelle certaines de ses classes depuis le projet de test, que ce soit la config de test qui est utilisée !
Voilà, j'espère que ce n'est pas trop confus, et que l'un(e) d'entre vous aura une solution à mon problème, ou du moins une piste ! Faites-moi part de votre expérience ! Comment faites-vous ?
Merci d'avance !
Partager