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();
    }
}
Другие вопросы по тегам