我正在尝试从 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
我的错误或误解是什么?
由于技术和时间限制,我无法使用您发布的库的版本对此进行测试,但我使用
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 了解更多信息。