【发布时间】:2010-03-08 13:56:48
【问题描述】:
我正在使用 needle 测试 API 测试 Seam 应用程序。在我的代码中,我使用了 EntityHome 的 getEntityManager() 方法。当我对内存数据库运行单元测试时,出现以下异常:
java.lang.IllegalStateException: No application context active
at org.jboss.seam.Component.forName(Component.java:1945)
at org.jboss.seam.Component.getInstance(Component.java:2005)
at org.jboss.seam.Component.getInstance(Component.java:1983)
at org.jboss.seam.Component.getInstance(Component.java:1977)
at org.jboss.seam.Component.getInstance(Component.java:1972)
at org.jboss.seam.framework.Controller.getComponentInstance(Controller.java:272)
at org.jboss.seam.framework.PersistenceController.getPersistenceContext(PersistenceController.java:20)
at org.jboss.seam.framework.EntityHome.getEntityManager(EntityHome.java:177)
etc ..
我可以通过注入 EntityManager 来解决其中的一些错误
@In
EntityManager entityManager;
不幸的是EntityHome 的persist 方法也调用了getEntityManager。这意味着大量的模拟或以某种方式重写代码。有什么解决方法吗?为什么还是会抛出这个异常?顺便说一句,我正在使用 Seam 2.2.0 GA。
组件没有什么特别之处。它们是由 seam-gen 生成的。测试是使用内存数据库执行的 - 我按照http://jbosscc-needle.sourceforge.net/jbosscc-needle/1.0/db-util.html 中的示例进行操作。
【问题讨论】: