2017-02-07 4 views
0

мы сталкиваемся с той же проблемой, что и указанная здесь: Weld using alternative producer from src/test/META-INF/beans.xml.сварной шов 2.4.2. Испытание финским maven

С помощью maven и сварного шва для испытания в сварке не используется beans.xml, находящийся в тесте/ресурсах/META-INF.

Мы смотрим на Google и на вопросы Jira Weld, но, похоже, у других людей нет такой же проблемы, как у нас.

Так кто-то знает, как использовать сварку в тесте Junit с Maven и для достижения этого Weld SE настроен beans.xml, который находится в тесте/ресурсах/META-INF?

ответ

0

Сварка сама по себе не поможет, Weld SE на самом деле выберет первый beans.xml на пути к классу. Точнее, main/resources/META-INF/beans.xml будет использоваться для архива бобов main/java/, а test/resources/META-INF/beans.xml будет использоваться для архива бобов test/java/. Поэтому, смешивая это, было бы неразумно в лучшем случае, и поэтому Weld не поддерживает его по умолчанию.

Во всяком случае, есть несколько вариантов решения вашей проблемы.

  1. Использование Arquillian + Shrinkwrap

    Для тестирования CDI, это самый лучший способ, что вы можете надеяться и очень хороший друг, как только вы узнаете его. Shrinkwrap позволит вам адаптировать развертывания именно к вашим потребностям, включая только нужные вам классы, а также beans.xml. Существует Arquillian container for Weld SE, который даже используется в Weld SE testsuite, поэтому вы можете вдохновить себя там.

  2. Отключить обнаружение во время самонастройки Weld SE

    Где-то в ваших модульных тестов, вы начинаете Weld контейнер. При этом вы можете использовать Weld#disableDiscovery(), что означает, что вы создадите синтетический архив бобов. В таком архиве обнаружение по умолчанию отключено, и только то, что вы специально добавляете (через methods такие addBeanClasses, addPackage, ..) приземлится в результирующий архив. А так как вы ahve n odiscovery, no beans.xml будет поднят! Вместо этого вы определяете все альтернативы, перехватчики, ... (опять же есть методы для этого на Weld class). Теперь, я думаю, это может быть «легко» помещено в какой-то метод @Before, если вам нужно сделать это несколько раз. Кроме того, вы также можете использовать Weld-junit, который предоставит вам JUnit @Rule и позволит вам легко описать развертывание по каждому классу.

Оба вышеуказанных подхода должны помочь вам в этом. Но, как я уже сказал, нет никакого способа добиться этого с помощью простого Weld SE.

+0

Привет, спасибо за ответ, и мы попробуем Arquillian + Shrinkwrap. Но мы говорим, что когда мы запускаем тест maven (id test/java /), файл test/resources/META-INF/beans.xml не используется, и это используется в main/resources/META-INF, который используется. – granier

+0

Да, я говорю, нет никакого способа сказать Свард: «Эй, выбирай этот!». Вместо этого я предлагаю вам два альтернативных способа сделать то, что вы хотите. – Siliarus

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