我正计划为我的一些EJB编写junit测试用例。我做了一点点谷歌和大多数链接指向阿基利安http://arquillian.org,但它似乎是缓慢的,它需要一个运行容器。我可以使用arquillian来测试jboss (org.jboss.ejb3.annotation.Service)吗?举个例子会有很大帮助吗?
经过一点调查,我发现了JBoss微容器http://docs.jboss.org/jbossmc/docs/2.0.x/userGuide/index.html。这个微容器需要任何jboss的运行实例吗?我可以在这个微容器中部署所有类型的EJB+ jboss服务bean吗?
此外,jboss微容器与JBossEmbeddedAS https://community.jboss.org/wiki/JBossEmbeddedASQuickstartAndRunnableExample的区别是什么?
提前感谢
迪潘卡伊
发布于 2013-10-08 11:06:35
单元测试的目的是只测试单个代码单元,例如bean类。
因此,单元测试不需要任何基础结构,并且应该模拟对其他单元的所有必要引用。
我知道,在现实生活中,这通常是很难实现的,但是如果您想拥有任何容器服务,例如注入机制,那么您的测试就超出了单元测试。
Arquillian提供了容器适配器,这样您的测试用例就可以在嵌入式环境中运行,甚至可以在真正的容器中运行。它的优点之一是能够在实际的应用程序服务器中运行测试,而不是在一些模拟环境中运行,并且能够在多个环境中运行相同的测试,例如在不同的应用服务器上。
因此,在您的示例中,我建议为所有可测试的单元编写单元用例(您将看到,如果您在开发该单元的同时进行测试,您将注意使它具有良好的可测试性),并对每个外部引用使用模拟框架(例如,Mockito),然后在有集成测试的情况下使用Arquillian。
发布于 2013-10-08 21:52:34
我们使用EJB3Unit取得了很好的效果。它根本不需要一个容器。它注入@DataSource、@PersistenceContext、@Resource和@EJB。
它也有局限性,因为它不是一个容器,比如它不创建事务,也不运行拦截器。但是您将使用集成测试测试@Interceptor和@Transaction,不是吗?
发布于 2013-10-31 23:20:06
最近,我公开了我自己开发的无容器EJB单元测试框架,参见测试乐趣-JEE中的示例。
testfun支持EJB和莫基托模拟的注入,以及使用JPA和JDBC。
https://stackoverflow.com/questions/19241514
复制相似问题