我很难理解如何在JUnit中为EJB和JPA正确地设置测试。我已经看到了使用Arquillian进行集成测试的建议,但我想做一个简单的单元测试。
我现在拥有的是一个带有注入Persintance上下文的EJB。我在Wildfly 9中运行应用程序,并在那里配置了数据源,因此我的持久性文件如下所示:
<jta-data-source>java:jboss/datasources/MyDataSource</jta-data-source>
<properties>
<!-- Properties for Hibernate -->
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.show_sql" value="false" />
</properties>
现在,如果我将glassfish-embedded all添加到我的测试依赖项中,以运行嵌入式EJB容器并创建一个简单的测试:
Map<String, Object> properties = new HashMap<>();
properties.put(EJBContainer.MODULES, new File("target/classes"));
EJBContainer container = EJBContainer.createEJBContainer();
TestEJb bean = (TestEJb) container.getContext().lookup("java:global/classes/TestEJb");
assertNotNull(bean);
assertEquals(1,bean.test());然后我收到错误,因为EJB包含容器不知道的对MyDataSource的引用。我是否应该创建另一个持久性单元,并以某种方式将其传递给EJB?
什么才是正确的方法呢?
发布于 2015-11-19 07:01:34
这里的问题是您没有应用程序上下文,因此查找失败。通常,为了对容器资源进行单元测试,可以使用mock对象,比如mockejb。
如果你搜索mockejb的例子,你会发现有很多例子。
https://stackoverflow.com/questions/33791644
复制相似问题