最新的EJB3 / JPA单元测试框架

时间:2010-03-21 02:26:39

标签: java unit-testing jpa java-ee ejb-3.0

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

5 个答案:

答案 0 :(得分:11)

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

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

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

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

一些资源

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

答案 1 :(得分:8)

对于单元测试,您可以使用JUnit,TestNG和您最喜欢的模拟框架(EasyMockMockitoPowerMockJMockitJMock)。

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

  

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

     

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

同时检查Improving the Testability of Java EE With Arquillian 1.0.0 Alpha 1 ReleasedArquillan空格。看起来很有趣IMO。

答案 2 :(得分:3)

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

Here您可以找到使用OpenEJB,TestNG和jMockIt进行单元测试的示例代码。

答案 3 :(得分:1)

一个选项也是使用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切换出来。

答案 4 :(得分:1)

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

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