1

我目前正在处理 3.1 版中测试 EJB 的主题,但我确实只有一些经验。所以我看了一下文献,发现了三种不同的测试 EJB 的方式/方法(3.0 版和更新版本)

1)使用简单的 POJT(Plain Old Java Tests)

2) 使用嵌入式容器

3) 在应用服务器中测试应用

在我弄清楚这些不同的方法后,我自己开始了一些研究并发现了一些可能性。

对于案例 1) 像 JUnit 或 TestNG 这样的工具几乎是完美的,为了解决注释问题,可以使用库 EasyGloss。对于非常简单的 bean,不需要 EasyGloss。“本地”测试工作正常,直到 bean 需要访问上下文(例如 sessionContext),使用事务或拦截器。

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

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

编辑:为案例 1)添加了更多信息。

4

2 回答 2

1

An embedded container is a part of EJB 3.1, so even JBoss AS 7 has to implement it.

Arquillian is a very good option as well, and since AS 7 starts so fast the extra overhead of an external AS is not that much.

You can also combine Arquilluan with the embedded container that AS 7 should offer.

于 2012-11-03T12:31:08.870 回答
1

正如 Vineet 指出的那样,有一个 JBoss Embedded Container。但是,只要您不使用特定于 AS 的类,在使用嵌入式 Glassfish 容器时应该不会出现问题(这里是一个简单的示例)。如果您确实密集使用提供的 EJB 基础架构,嵌入式容器将特别有趣;正如您提到的拦截器、事务等。否则,与普通单元测试相比,优势并没有那么大。

应用程序服务器中测试您的应用程序并且您的组件是远程 Bean 时,您可以通过单元测试中的 JNDI 查找直接测试它们;您还可以将远程 Beans 集成为测试挂钩。但是,如果您想测试 CDI 或本地 bean,Arquillian 尤其有趣,因为您无法远程访问它们。

我认为将嵌入式容器或 Arquillian 等工具/技术与普通单元测试进行比较是很重要的。有很大的优势吗?如果没有该工具,有没有我无法涵盖的测试?仅仅因为某些东西是新的和很酷的并不意味着你一定会从中受益:)

于 2012-11-07T13:49:54.930 回答