在Junit测试脚本中注入CDIBean

在Junit测试脚本中注入CDIBean,junit,jboss,cdi,Junit,Jboss,Cdi,我有一个应用程序在JBossAS 7.1.1上运行。此应用程序使用CDI规范的一些资源作为拦截器、注入等。我的应用程序的架构非常简单,结构如下: 视图(xhtml和facelets) 控制器(使用@Named的托管bean,ViewScope中除外) 模型(分为服务和dao两层) 服务(在@Stateless注释中,我使用我创建的拦截器来管理数据库事务,因为我使用本机JDBC) dao 我需要创建一些脚本来测试应用程序服务层,注入服务实现并调用业务方法 我相信这种架构非常常见。我为我的英语感到抱

我有一个应用程序在JBossAS 7.1.1上运行。此应用程序使用CDI规范的一些资源作为拦截器、注入等。我的应用程序的架构非常简单,结构如下:

视图(xhtml和facelets)

控制器(使用@Named的托管bean,ViewScope中除外)

模型(分为服务和dao两层)

服务(在@Stateless注释中,我使用我创建的拦截器来管理数据库事务,因为我使用本机JDBC)

dao

我需要创建一些脚本来测试应用程序服务层,注入服务实现并调用业务方法

我相信这种架构非常常见。我为我的英语感到抱歉

有人能帮我吗


谢谢

如果您想测试完整的容器,您可能需要。如果要使用模拟进行单元测试,请使用weld se在测试中启动一个独立的焊接容器

new Weld().initialize().instance().select(YourClassName.class).get();

您可以使用beans.xml中的替代项替换模拟对象。您还可以使用简化了一点过程的CDI单元。

此CDI单元有其他依赖的LIB吗?我试图使用它,但出现了一个错误。您知道如何正确配置CDI单元吗?非常感谢。我做了您推荐的bblonski,但出现了以下错误:
org.jboss.weld.context.ContextNotActiveException:weld-001303:org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:680)org.jboss.weld.bean.proxy.contextbeanninstance.getInstance上没有作用域类型javax.enture.RequestScope的活动上下文(ContextBeanInstance.java:79)位于org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:99)位于org.jboss.weld.proxies.CommonDataSource$DataSource$Wrapper$-896135856$proxy$\uWeldClientProxy.getConnection(未知源)更多…
您是否尝试使用@InRequestScope CDI单元注释?否则,如果您想从容器中模拟完整的请求周期,您可能更希望使用Arquillian。使用CDI单元测试低级库和实用程序方法,使用Arquillian测试用户请求和会话数据。因此…我尝试将CDI单元与@In一起使用RequestScope注释但不起作用。Arquillian不起作用,因为我没有使用Maven。我不知道我必须做什么。我放弃了。我已经尝试了很多方法。我用weld se编写了一个JUnit类,我让它在我的测试脚本中注入了一个业务组件。但是,当调用业务方法时,出现了weld-001303错误。谢谢很多!我发现了一个使用Arquillian和ant或gradle的例子。这里还有一些关于将Arquillian与其他构建系统集成的注释。