需要CDI容器的单元测试导致java.lang.IllegalStateException:无法访问CDI

问题描述 投票:0回答:1

我正在将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();
     }
}
unit-testing cdi junit5 weld
1个回答
0
投票

我总是这样做(CDI 2.0及更高版本):

© www.soinside.com 2019 - 2024. All rights reserved.