【问题标题】:junit test for EJBEJB 的 junit 测试
【发布时间】:2013-10-08 07:20:37
【问题描述】:

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

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

进一步,jboss microcontainerJBossEmbeddedAS 有什么区别https://community.jboss.org/wiki/JBossEmbeddedASQuickstartAndRunnableExample

提前致谢

迪潘卡杰

【问题讨论】:

  • 您可能还想研究一下 openEJB。在 Eclipse 中非常容易设置和超快速启动。它会自动检测项目中的 EJB 和 MDB 并将其绑定到 JNDI。

标签: jakarta-ee junit jboss ejb mbeans


【解决方案1】:

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

因此,您的单元测试不应该需要任何基础设施,并且应该模拟出对其他单元的所有必要引用。

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

Arquillian 提供容器适配器,以便您的测试用例可以在嵌入式甚至真实容器中运行。它的好处之一是能够在真实的应用程序服务器而不是一些模拟环境中运行测试,并在多个环境中运行相同的测试,例如在不同的应用服务器上。

因此,在您的情况下,我建议为所有可单元测试的内容编写单元案例(您会看到,如果您在开发单元的同时进行测试,您会注意使其可很好地测试)并使用为每个外部引用提供一个模拟框架(例如 Mockito),然后在需要集成测试的情况下使用 Arquillian。

【讨论】:

  • 谢谢Geziefer...你能不能也关注一下Microcontainer...我可以假设它是一个可以使用java代码启动/停止/部署的“迷你jboss”吗?
  • @dipankaj 我没有使用过微容器,但正如您提供的参考资料所述,它是“JBoss 的 JMX 微内核,支持直接 POJO 部署和在 JBoss 应用程序服务器之外独立使用。” - 所以它不是 EJB 容器。 JBoss Embedded AS 提供“用于 JBoss 应用服务器的创建、配置、生命周期和部署操作的最终用户 API”。 - 所以你可以在你的测试用例中引导一个 AS。我们在 Seam 2 项目中将它与 TestNG 结合使用。 - 但是,我仍然建议在尽可能接近真实容器的地方进行集成测试。
【解决方案2】:

我们使用 EJB3Unit 效果非常好。它根本不需要容器。它注入@DataSource、@PersistenceContext、@Resource 和@EJB

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多