2010-04-14 3 views
8

Вот что я пытаюсь сделать. Я использую постоянство JPA в веб-приложении, но у меня есть набор модульных тестов, которые я хочу запустить за пределами контейнера.Является ли JPA persistence.xml classpath?

У меня есть мой основной persistence.xml в папке META_INF моего основного приложения, и он отлично работает в контейнере (Glassfish).

Я разместил второй persistence.xml в папке META-INF моего каталога test-classes. Это содержит отдельный блок сохранения, который я хочу использовать только для тестирования. В eclipse я разместил эту папку выше в пути к классам, чем папка по умолчанию, и, похоже, она работает.

Теперь, когда я запускаю сборку maven непосредственно из командной строки и пытается запустить модульные тесты, переопределение persistence.xml игнорируется. Я могу увидеть переопределение в папке META-INF созданного maven каталога test-classes, и я ожидал, что тесты maven будут использовать этот файл, но это не так. Моя конфигурация конфигурации Spring Spring также работает аналогичным образом.

Я смущен тем, находится ли persistence.xml через путь к классам. Если бы это было так, мое переопределение должно работать подобно переопределению пружины, поскольку плагин maven surefire explains «[Каталог тестового класса] будет включен в начале путь к тестовому классу».

Я неправильно понял, как находится файл persistence.xml?

Я мог (и имел) создать второй блок сохранения в файле persistence.xml, но он чувствует себя грязным, чтобы разместить тестовую конфигурацию в этом рабочем файле. Любые другие идеи о том, как достичь моей цели, приветствуются.

ответ

3

persistence.xml загружен из дорожки класса; в прошлом я сделал именно то, что вы описали.

Это, скорее всего, проблема с maven. Вы можете отладить путь класса maven, выполнив его с помощью опции -X.

+0

ОК - Спасибо за отзыв. По крайней мере, я знаю, что я не делаю то, что полностью там. – Vinnie

+0

OK - теперь это работает. Прежде чем я назвал каждую единицу персистентности в разных файлах с тем же именем. Я изменил блок непрерывности теста на другое имя. Мне это кажется неправильным, но, возможно, это ограничение, о котором я не знал. – Vinnie

+0

Я пошел и выкопал код, где я это делал раньше, и у меня была другая единица персистентности, определенная для модульных тестов, хотя в моем файле persistence.xml теста был одинаковый (не тестируемый) блок персистентности. Вероятно, это было необязательно. Я думаю, что в модульных тестах используется модуль сохранения теста при создании диспетчера сущностей. –

4

Непонятно, где вы разместили «вторую» persistence.xml (тестовая версия), но вы должны поместить его в src/test/resources/META-INF. Ресурсы тестирования автоматически добавляются к пути к классам, установленному Maven для ваших модульных тестов, и имеют приоритет над ресурсами, размещенными в src/main/resources.

+0

правый. вот где это. – Vinnie

Смежные вопросы