Я использую Weld для CDI.
Я пытаюсь написать модульный тест для службы "A", используя JUnit 5. Конструктор службы A:
@Inject
public A (B b) {this.b = b}
Конструктор класса B:
@ApplicationScoped
public class B{
private C c;
public B() {
c = CDI.current().select(C.class).get();
}
}
Когда я пытаюсь смоделировать класс B во время модульных тестов, я получаю:
java .lang.IllegalStateException: Невозможно получить доступ к CDI
, потому что во время модульных тестов нет надлежащего контейнера CDI.
Как можно решить эту проблему? в любом случае это с Mockito? (предположим, что замена CDI.current () невозможна)
Вот так выглядит тестовый код:
public class ATest {
private A a;
@WeldSetup
private WeldInitiator weld = WeldInitiator.from(A.class)
.addBeans(createBBean()).build();
private Bean<?> createBBean() {
return MockBean.builder()
.types(B.class)
.scope(ApplicationScoped.class)
.creating(new B())
.build();
}
@BeforeEach
void setUpClass() {
a = weld.select(A.class).get();
}
}