Weld-Junit5: addPackages не добавляет все содержащиеся компоненты в тестовый контейнер.

Я пытаюсь перейти с Java EE 8 на Jakarta EE 10 и запускаю тест JUnit 5 с помощью Weld. Я создал простой пример с JUnit5, и Weld (cdi) не смог разрешить (внутренние) внедренные классы.

Тест не пройден: WELD-001408: Неудовлетворенные зависимости ...

Пример класса (который внедряет класс SampleHelper):

      public class Example {
    @Inject
    ExampleHelper exampleHelper;

    public void getHelloText() {
        exampleHelper.greet();
    }
}

Пример класса Helper:

      public class ExampleHelper {
    public void greet() {
        System.out.println("Hello");
    }
}

Тест JUnit5:

      @ExtendWith(WeldJunit5Extension.class)
class ExampleTest {

    @WeldSetup
    public WeldInitiator weld = WeldInitiator.of(WeldInitiator.createWeld()
            .addBeanClass(Example.class)
            .addPackages(false, Example.class.getPackage())
    );

    @Inject
    Example example;

    @Test
    public void test() {
        example.getHelloText();
    }
}

Я ожидал, что, добавив пакет, можно будет найти и внедрить все классы внутри этого пакета. (Вот как я делал это раньше с JEE8).

Я получаю ошибку:

      org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type ExampleHelper with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject com.company.wf28test.Example.exampleHelper
  at com.company.wf28test.Example.exampleHelper(Example.java:0)

Только если я явно добавлю все внедренные классы по отдельности, Weld сможет их найти.

      .addBeanClass(Example.class)
.addBeanClass(ExampleHelper.class)

затем тест проходит

Зависимости:

      jakarta.jakartaee-api 10.0.0
junit-jupiter-api 5.9.3
junit-jupiter-engine 5.9.3
weld-junit5 4.0.0.Final

В чем моя ошибка или недоразумение?

1 ответ

Из-за технических и временных ограничений я не могу протестировать это с опубликованными вами версиями библиотек, но я столкнулся с той же проблемой, используяweld-junit5 2.0.0.Finalи мог бы решить эту проблему, опустивgetPackage()вызов.

то есть ты мог бы попробовать

              .addPackages(false, Example.class)

вместо

              .addPackages(false, Example.class.getPackage())
Другие вопросы по тегам