2010-08-12 2 views
1

Je construis une application en utilisant OpenJPA 2.0.0, Jersey 1.3, et JUnit 4.8.1.OpenJPA, Jersey, JUnit: Utiliser une unité de persistance différente pour mes tests unitaires?

Je l'ai configuré pour avoir deux unités de persistance différentes définies dans mon fichier persistence.xml: "default" et "unittest". La valeur par défaut est configurée pour se connecter à une instance Oracle, tandis que unittest est configuré pour se connecter à un fichier de base de données intégré H2DB local. Je le fais de sorte que je commence toujours mes tests unitaires avec une base de données propre qui contient certaines données connues, qui peuvent être écrasées entre chaque série de tests unitaires.

Le problème est que maintenant je veux utiliser le Jersey Testing Framework pour tester mes services web réels, plutôt que seulement les couches inférieures du programme. Mes classes de ressources racine ne chargent pas l'unité de persistance unittest, elles chargent toujours la valeur par défaut.

donc ce que je dois probablement faire est d'injecter dans les classes de ressources racine qui unité de persistance doit être utilisée pour instancier le EntityManager, et avoir un moyen d'injecter unittest quand je cours mes tests, mais l'injection par défaut autrement. Mais je ne peux pas penser à un bon moyen de le faire. Je suis tout nouveau dans le développement de Java EE, ce qui pourrait être évident.

Une aide?

+0

D'où vient l'EntityManager, ou plutôt l'EntityManagerFactory? L'avez-vous créé en appelant Persistence.createEntityManagerFactory(), ou est-ce qu'il est injecté par un framework? Vous ne mentionnez aucun type de cadre dans votre question. –

Répondre

1

Je pense qu'il devrait être possible de créer une deuxième persistence.xml dans src/test/resources/META-INF. Si je comprends bien les choses, maven mettra target/test-classes dans le classpath devant target/classes, de sorte que dans un test unitaire, seul votre test persistence.xml sera lu. De cette façon, vous pouvez utiliser le même nom d'unité de persistance, mais avec une configuration différente.

src/main/resources/ 
    META-INF 
     persistence.xml <-- for actual application 

src/test/resources/ 
    META-INF 
     persistence.xml <-- for unit tests 

EDIT:

oups, j'été dupé à croire que vous avez utilisé Maven par l'autre réponse. Si ce n'est pas le cas, oubliez ce que j'ai dit ...

0

Utilisez-vous Maven? Si oui, il y a une astuce qui vous permet de "lire" une valeur POM dans votre classe Java. C'était très utile pour moi, vous devez simplement définir votre nom d'unité de persistance dans votre POM, un autre pendant le test, et c'est tout.

Maven variables in java context

Questions connexes