Hier ist, was ich versuche zu tun. Ich verwende JPA-Persistenz in einer Webanwendung, aber ich habe eine Reihe von Komponententests, die ich außerhalb eines Containers ausführen möchte.
Ich habe mein primäres persistence.xml
im Ordner META_INF
meiner Haupt-App und es funktioniert großartig im Container (Glassfish).
Ich habe eine zweite persistence.xml
im Ordner META-INF
meines Verzeichnisses test-classes
abgelegt. Dies enthält eine separate Persistenzeinheit, die ich nur für den Test verwenden möchte. In Eclipse habe ich diesen Ordner im Klassenpfad höher platziert als im Standardordner und es scheint zu funktionieren.
Wenn ich jetzt den Maven-Build direkt von der Befehlszeile aus starte und versuche, die Komponententests auszuführen, wird die persistence.xml
-Überschreibung ignoriert. Ich kann die Überschreibung im Ordner META-INF
des von maven generierten test-classes
-Verzeichnisses sehen, und ich habe erwartet, dass die Maven-Tests diese Datei verwenden, aber das ist es nicht. Meine Spring Test Konfiguration Overrides, die in ähnlicher Weise erreicht werden, funktionieren.
Ich bin verwirrt darüber, ob die persistence.xml
durch den Klassenpfad lokalisiert ist. Wenn dies der Fall wäre, sollte meine Überschreibung wie die Spring-Überschreibung funktionieren, da das maven todsichere Plugin erklärt "[Das Testklassenverzeichnis] wird am Anfang des Testklassenpfads enthalten".
Habe ich fälschlicherweise angenommen, wie die Datei persistence.xml
gefunden wurde?
Ich konnte (und habe) eine zweite Persistenzeinheit in der Produktionsdatei persistence.xml
erstellen, aber es fühlt sich dreckig an, die Testkonfiguration in diese Produktionsdatei zu stellen. Andere Ideen, wie ich mein Ziel erreichen kann, sind willkommen.
Es ist unklar, wo Sie die "zweite" persistence.xml
(die Testversion) platziert haben, aber Sie sollten sie in src/test/resources/META-INF
platzieren. Testressourcen werden automatisch zu dem Klassenpfad hinzugefügt, der von Maven für Ihre Komponententests eingerichtet wurde, und haben Vorrang vor Ressourcen, die in src/main/resources
platziert wurden.
Tags und Links java jpa unit-testing classpath maven-2