最新的unit testing框架EJB3 / JPA

使用EJB 3 / JPA启动新项目,主要是无状态会话bean和批处理作业。 我过去在标准的Java webapps上使用过JUnit,它看起来效果很好。 在EJB2中,unit testing很痛苦,并且需要一个运行容器(如JBoss)来进行调用。 既然我们将在EJB3 / JPA中工作,我想知道公司正在使用什么来编写和运行这些测试。 Junit和JMock是否仍然被认为是相关的,还是有其他新的框架,我们应该调查?

恕我直言,是的他们仍然相关。

使用EJB3,您可以像常规POJO一样测试EJB,或者使用嵌入式EJB容器作为托管bean。

对于JPA,您可以为测试嵌入JPA实现并使用内存数据库,也可以完全模拟数据层。

对于我上一个EJB项目,我编写了一些粘合代码来测试EJB,因为嵌入式EJB容器还不够成熟,但现在我会选择嵌入式EJB容器+ JUnit。

一些资源

  • 博客文章: 如何在0.8秒内对EJB 3进行unit testing
  • 所以问题: EJB的良好unit testing资源

但是还有很多其他人很容易找到

对于unit testing ,您可以使用JUnit,TestNG和您最喜欢的模拟框架( EasyMock , Mockito , PowerMock , JMockit , JMock )。

对于集成测试 ,您可以从测试中启动/停止可嵌入容器(JBoss,OpenEJB,GlassFish v3)。 或者,看看Arquillian ,这是一个最近用于Java EE应用程序集成测试的新玩家:

Arquillian项目的任务是提供一个简单的测试工具,开发人员可以使用它来为他们的Java应用程序(很可能是企业应用程序)生成广泛的集成测试。 测试用例可以在容器内执行,与被测代码一起部署,或者通过与容器协调,充当部署代码的客户端。

为了避免在开发人员的构建环境中引入不必要的复杂性,Arquillian透明地与熟悉的测试框架(例如JUnit 4,TestNG 5)集成,允许使用现有的IDE,Ant和Maven测试插件启动测试而无需任何附加组件。

还要检查使用Arquillian 1.0.0 Alpha 1发布的改进Java EE的可测试性和Arquillan空间。 看起来很有趣的IMO。

您可以使用Apache OpenEJB ,这是一个可以嵌入到TestNG中的轻量级EJB3.0实现。

在这里,您可以找到使用OpenEJB,TestNG和jMockIt进行unit testing的示例代码。

一个选项也是使用Spring,但当然你的架构也将基于运行时的Spring。 我喜欢Spring的原因是在测试阶段很容易注入需要模拟数据和对象的东西,因为你可以在JUnit测试用例中注释要使用的上下文文件:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:test-context.xml"}) public class MyClassTest { @Autowired private MyClass myClass; @Test public void testMyMethod() {....} 

但是,如果你不想使用Spring,那么这是无关紧要的:)另一方面,之后很容易从Spring切换出来。

我会建议Arquillian。 使用Arquillian,您可以选择测试普通的EJB或CDI bean。 您可以再次运行嵌入式,托管或远程EE容器的测试。 Arquillian项目不断进行维护……

然而,进行第一次arquillian测试并不总是那么容易。 您可能无法找到正确的arquillian版本和容器版本的依赖项。 我已经发布了一个关于此的教程序列。 但为了不让我怀疑推广,链接不会发布在这里。 如果你喜欢你可以谷歌“与Arquillian part1教程EJB3集成测试”。