1

我正在为我的一些 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 微容器与JBossEmbeddedAS之间有什么区别 https://community.jboss.org/wiki/JBossEmbeddedASQuickstartAndRunnableExample

提前致谢

迪潘卡伊

4

3 回答 3

3

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

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

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

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

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

于 2013-10-08T11:06:35.960 回答
2

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

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

于 2013-10-08T21:52:34.297 回答
2

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

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

于 2013-10-31T23:20:06.670 回答