2013-10-08 50 views
1

我正在为我的一些EJB准备junit测试用例。我做了一点谷歌和大多数链接指向arquillian http://arquillian.org,但似乎arquillian是缓慢的,它需要一个正在运行的容器。我可以使用arquillian来测试jboss服务bean(org.jboss.ejb3.annotation.Service)吗 - 一个例子会有很大的帮助吗?EJB的junit测试

一点点调查导致我到JBoss Microcontainerhttp://docs.jboss.org/jbossmc/docs/2.0.x/userGuide/index.html。这个Microcontainer是否需要任何运行的jboss实例?我可以在这个微容器中部署所有类型的EJB + jboss服务bean吗?

另外,是什么VS JBossEmbeddedAShttps://community.jboss.org/wiki/JBossEmbeddedASQuickstartAndRunnableExample

预先感谢JBoss微之间的差

Dipankaj

+0

你可能也想看看openEJB。在Eclipse中非常容易设置和超快速启动。它在您的项目中自动检测EJB和MDB并将其绑定到JNDI。 – helios

回答

3

一个单元测试的目的是测试只的单个单元代码,例如你的bean类。

因此,你的单元测试不应该要求任何基础设施,并应该嘲笑所有必要的参考其他单位。

我知道在现实生活中这通常很难实现,但是如果你想要有任何容器服务,例如注射机制,那么你的测试超越了单元测试。

Arquillian提供了容器适配器,以便您的测试用例可以在嵌入式甚至真实容器中运行。它的好处之一是能够在真实应用服务器上运行测试,而不是在某些模拟环境中运行测试,并在多种环境下运行相同的测试。在不同的应用服务器上所以在你的情况下,我会建议为单元测试的所有东西(你会看到,如果你在开发单元的同时进行测试,你会注意使它可以很好地测试)编写单元格,以及对每个外部参考使用一个模拟框架(例如Mockito),然后在您进行集成测试的情况下使用Arquillian。

+0

感谢Geziefer ......你能不能专注于Microcontainer ......我可以假设它是一个“迷你jboss”,可以用java代码启动/停止/部署吗? – dgm

+0

@dipankaj我没有使用Microcontainer,但作为您提供的参考状态,它是“JBoss的JMX Microkernel,支持在JBoss应用程序服务器之外直接部署POJO和独立使用。” - 所以它不是一个EJB容器。 JBoss Embedded AS为JBoss Application Server的创建,配置,生命周期和部署操作提供了“最终用户API”。 - 所以你可以在你的测试用例中引导一个AS。我们在Seam 2项目中结合TestNG使用了它。 - 但是,我仍然建议尽可能靠近真实容器进行集成测试。 –

2

我们使用EJB3Unit具有很好的结果。它根本不需要容器。它注入了@DataSource,@ PersistenceContext,@Resource和@EJB

它也有局限性,因为它不是容器,就像它不创建事务并且不运行拦截器。但是你会用集成测试来测试@Interceptor和@Transaction吗?

2

我最近公开了我自己开发的无容器EJB单元测试远程工作,请参阅testfun-JEE中的示例。

testfun-JEE支持注入EJB和Mockito mock以及使用JPA和JDBC。