2010-03-21 62 views
19

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

回答

10

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

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

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

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

一些资源

但也有不少人容易玛丽萨

3

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

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

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。

1

一个选择也是使用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中退出。

1

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

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