我正在将Weld用于CDI。
我正在尝试使用JUnit 5为服务“ A”编写单元测试。服务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();
}
}
我总是这样做(CDI 2.0及更高版本):