IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

[Unit Testing] Comment s'y prendre avec Hibernate ?


Sujet :

Hibernate Java

  1. #1
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut [Unit Testing] Comment s'y prendre avec Hibernate ?
    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 !
    Wookai


  2. #2
    Membre habitué Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Points : 178
    Points
    178
    Par défaut
    Hello,

    Je ne vois pas ce qu'il y a de bizarre dans ta configuration.
    Ce qui est essentiel, c'est d'avoir le fichier cfg.xml adéquat dans le CLASSPATH quand tu fais tes TU ou bien quand tu buildes ton war pour déploiement. Donc avoir un projet dédié pour les TU avec ses propres fichiers de conf est justifié.

    Pour ma part, j'utilise la structure imposée par maven2 qui crée 2 répertoires racines dans chaque projet, un pour les sources (src/main/java) et un pour les tests unitaires (src/test/java). J'ai aussi, pour chaque projet 2 répertoires racines pour les ressources (src/main/resources et (src/test/resources).
    Je peux donc avoir des fichiers de conf dédiés aux tests unitaires dans src/test/resources. Ainsi, lors des tests unitaires j'utilise ces fichiers de conf. C'est là que j'ai mis mes paramètres de connexion pour HSQLDB, avec un type de transaction LOCAL.

    Par contre, pour mon EAR, j'utilise un autre fichier de conf contenu dans src/main/resources, où j'ai mes paramètres de connexion de type transaction JTA avec le nom JNDI du datasource.
    Lors du build de l'EAR, maven2 ne prends que les sources et resources contenus dans src/main/java et src/main/resources, ce qui exclue TOUT ce qui concerne les tests unitaires

    J'espère avoir été assez clair.

    Tu peux aller voir la doc maven pour plus d'info. Il exite une command maven qui génère les projets eclipse à partir de la description des projets contenus dans les fichiers pom.xml (mvn eclipse:eclipse). Ainsi, tu peux développer sous Eclipse tout en gardant maven pour le build/packaging/deploiement.
    Tout le monde savait que c'était impossible à faire. Puis un jour quelqu'un est arrivé qui ne le savait pas, et il le fit (Winston Churchill)

  3. #3
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Merci pour ta réponse !

    Cette architecture me semblait aussi assez naturelle, mais j'ai juste des soucis pour savoir quel fichier de configuration est utilisé (vu que j'inclus mon projet dans le classpath du projet de test, les deux fichiers de conf sont dans le classpath ! Pour l'instant ils sont dans src/hibernate.cfg.xml, je devrais peut-être les sortir de src pour les mettre dans un répertoire config/ ?). Je vais investiguer un peu tout ça !

    Tu parles de Maven, ça m'intéresse grandement ! J'ai vu plusieurs références à cet outil lorsque je cherchais des infos, mais je ne l'ai jamais utilisé. D'après ce que j'ai compris, c'est un outil de build et de déploiement pour des projets java, c'est juste ?

    Je suis au commencement d'un projet web, qui sera déployé sur un serveur Tomcat. Pour l'instant, j'en suis au tout début, à coder la partie métier. Mais par la suite j'aurai l'interface web à faire, que je testerai pour commencer sur ma machine, puis sur la future machine de prod. Est-ce que cet outil me serait utile ? Sachant que je n'ai pas beaucoup de marge niveau temps pour ce projet, est-ce que ça vaut la peine que je prenne un peu de temps pour l'installer, le configurer et comprendre comment il s'utilise ?

    Tu dis qu'il est possible de travailler avec Eclipse et d'utiliser maven pour le build/déploiement ?

    Merci pour ces infos !
    Wookai


Discussions similaires

  1. Comment s'y prendre avec itextsharp
    Par TAMBOOH dans le forum C#
    Réponses: 1
    Dernier message: 06/08/2010, 18h07
  2. Comment s' y prendre avec les favoris
    Par Nanos dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/01/2010, 17h20
  3. Comment échapper le caractère : avec hibernate ?
    Par ReiVon dans le forum Hibernate
    Réponses: 12
    Dernier message: 09/02/2009, 20h33
  4. Comment le type enum avec Hibernate
    Par 0coco0 dans le forum Langage
    Réponses: 1
    Dernier message: 27/08/2008, 13h54
  5. Comment forcer la sauvegarde avec Hibernate?
    Par yli_ren dans le forum Hibernate
    Réponses: 2
    Dernier message: 07/05/2008, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo