CDI, CDI-блок. Исключение при попытке ввести интерфейс
Я тестирую класс, используя библиотеку cdi-unit. Тестовый класс:
@RunWith(CdiRunner.class)
public class IAktResponseMapperTest {
@Inject
private ITestCDI testCDI;
@Test
public void testCDI(){
testCDI.testCDI();
}
}
Интерфейс ITestCDI:
public interface ITestCDI {
void testCDI();
}
Класс TestCDI:
@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 напрямую вместо интерфейса ITestCDI, это нормально. Как я могу заставить работать интерфейс? Спасибо за помощь!
1 ответ
Решение
CDI-Unit не сканирует все классы вашего пакета, поэтому не знает TestCDI
реализация ITestCDI
, Вы можете управлять средой CDI с помощью CDI-Unit, используя @AdditionalClasses
, @AdditionalPackages
или же @AdditionalClasspath
аннотаций.
В вашем случае добавьте например @AdditionalClasses(TestCDI.class)
аннотация:
@RunWith(CdiRunner.class)
@AdditionalClasses(TestCDI.class)
public class IAktResponseMapperTest {
@Inject
private ITestCDI testCDI;
@Test
public void testCDI(){
testCDI.testCDI();
}
}