CDI,cdi-单元。异常尝试注入接口
CDI, cdi-unit. Exception trying inject interface
我使用 cdi-unit 库测试 class。
测试 class:
@RunWith(CdiRunner.class)
public class IAktResponseMapperTest {
@Inject
private ITestCDI testCDI;
@Test
public void testCDI(){
testCDI.testCDI();
}
}
ITestCDI接口:
public interface ITestCDI {
void testCDI();
}
测试CDI class:
@ApplicationScoped
public class TestCDI implements ITestCDI {
public void testCDI() {
System.out.println("testCDI");
}
}
所以,运行 这个测试我得到错误:
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type ITestCDI with qualifiers @Default
at injection point [UnbackedAnnotatedField] @Inject private ru.nwth.pio.personal_area.accounting.mapper.IAktResponseMapperTest.testCDI
at ru.nwth.pio.personal_area.accounting.mapper.IAktResponseMapperTest.testCDI(IAktResponseMapperTest.java:0)
但是如果我直接注入TestCDI class 而不是接口ITestCDI,就可以了。如何使界面正常工作?感谢您的帮助!
CDI-Unit 不会扫描包的所有 类,因此不知道 ITestCDI
的 TestCDI
实现。
您可以使用 @AdditionalClasses
、@AdditionalPackages
或 @AdditionalClasspath
注释通过 CDI-Unit 控制 CDI 环境。
在您的情况下,添加例如 @AdditionalClasses(TestCDI.class)
注释:
@RunWith(CdiRunner.class)
@AdditionalClasses(TestCDI.class)
public class IAktResponseMapperTest {
@Inject
private ITestCDI testCDI;
@Test
public void testCDI(){
testCDI.testCDI();
}
}
我使用 cdi-unit 库测试 class。 测试 class:
@RunWith(CdiRunner.class)
public class IAktResponseMapperTest {
@Inject
private ITestCDI testCDI;
@Test
public void testCDI(){
testCDI.testCDI();
}
}
ITestCDI接口:
public interface ITestCDI {
void testCDI();
}
测试CDI class:
@ApplicationScoped
public class TestCDI implements ITestCDI {
public void testCDI() {
System.out.println("testCDI");
}
}
所以,运行 这个测试我得到错误:
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type ITestCDI with qualifiers @Default
at injection point [UnbackedAnnotatedField] @Inject private ru.nwth.pio.personal_area.accounting.mapper.IAktResponseMapperTest.testCDI
at ru.nwth.pio.personal_area.accounting.mapper.IAktResponseMapperTest.testCDI(IAktResponseMapperTest.java:0)
但是如果我直接注入TestCDI class 而不是接口ITestCDI,就可以了。如何使界面正常工作?感谢您的帮助!
CDI-Unit 不会扫描包的所有 类,因此不知道 ITestCDI
的 TestCDI
实现。
您可以使用 @AdditionalClasses
、@AdditionalPackages
或 @AdditionalClasspath
注释通过 CDI-Unit 控制 CDI 环境。
在您的情况下,添加例如 @AdditionalClasses(TestCDI.class)
注释:
@RunWith(CdiRunner.class)
@AdditionalClasses(TestCDI.class)
public class IAktResponseMapperTest {
@Inject
private ITestCDI testCDI;
@Test
public void testCDI(){
testCDI.testCDI();
}
}