Weld-Junit5:addPackages 不会将所有包含的 bean 添加到测试容器中

问题描述 投票:0回答:1

我正在尝试从 Java EE 8 迁移到 Jakarta EE 10,并使用 Weld 运行 JUnit 5 测试。我使用 JUnit5 创建了一个简单的示例,而 Weld (cdi) 无法解析(内部)注入的类。

测试失败:WELD-001408:不满足的依赖关系 ...

Example 类(注入ExampleHelper 类):

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

我的错误或误解是什么?

java junit5 weld-junit5
1个回答
0
投票

由于技术和时间限制,我无法使用您发布的库的版本对此进行测试,但我使用

weld-junit5 2.0.0.Final
遇到了同样的问题,并且可以使用
@EnableAutoWeld
@AddPackages
注释来解决它。如果您也可以使用注释,也许值得尝试看看这是否有效:

@EnableAutoWeld
@AddPackages(Example.class})
class ExampleTest {

    @Inject
    Example example;

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

请参阅 https://github.com/weld/weld-testing/tree/master/junit5#weldjunit5autoextension 了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.