2012-11-03 54 views
1

我目前正在3.1版本中测试EJB的主题,我确实只有一些经验。所以,我把看文献,发现测试EJB的三种不同的方式/方法(版本3.0及更高版本)简单POJT的测试EJB 3.1的方法

1)使用(普通Java测试)嵌入式的

2)使用集装箱

3)应用服务器

应用程序的测试我想通了这些不同的方法后,我开始了我自己的一些研究,发现了一些可能性。

对于情况1)类似JUnit或TestNG的工具几乎是完美的,并且可以解决EasyGloss可以使用的注释问题。对于非常简单的豆EasyGloss是没有必要的。 “本地”测试工作正常,直到bean需要访问上下文(例如sessionContext),使用事务或拦截器。

我使用JBoss AS 7.1.1,据我所知这个应用服务器没有提供嵌入式Container。所以我可以切换到Glassfish(我不喜欢)或者使用OpenEJB或Arquillian等替代方法来处理案例2)的测试。

我知道你们有更多的测试Jave EE和EJB的经验和知识。所以我想问你是否会与我分享你的经验,也许给一些提示和技巧,更多的想法或ejbs高效测试的例子代码。

编辑: 在案例1)中增加了更多信息。

+1

如果你正在寻找一个AS7嵌入式的Arquillian容器,[它被合并到主分支(https://开头的问题。 jboss.org/browse/AS7-974)。我不确定何时会发布。请注意,这与EJB 3.1嵌入容器在概念上有所不同,它的使用说明在[此处](https://community.jboss.org/wiki/EJB31Embeddable)。 –

回答

1

嵌入式容器是EJB 3.1的一部分,所以即使JBoss AS 7也必须实现它。

Arquillian也是一个很好的选择,并且由于AS 7的启动速度非常快,所以外部AS的额外开销并不大。

您也可以将Arquilluan与AS 7应提供的嵌入式容器结合使用。

1

正如Vineet指出的那样,JBoss 嵌入式容器。但是,只要不使用AS特定的类,在使用嵌入式Glassfish容器时应该没有问题(here就是一个简单的例子)。如果您使用所提供的EJB基础架构,嵌入式容器尤其有趣;正如你提到的拦截器,交易等。否则,与普通单元测试相比,其优势并不大。

当在应用程序服务器中测试您的应用程序并且您的组件是远程Bean时,您可以在单元测试中通过JNDI查找直接测试它们;您也可以将远程Bean集成为测试钩子。然而,如果你想测试CDI或Local beans,Arquillian尤其有趣,因为你无法远程访问它们。

我认为将嵌入式容器或Arquillian等工具/技术与普通单元测试进行比较是至关重要的。有很大的优势吗?如果没有这个工具,是否有任何测试我无法覆盖? 仅仅因为一些是新的酷并不意味着你一定能从中获益:)