单元测试另一个ejb注入的ejb3.0

时间:2012-01-03 14:43:51

标签: unit-testing java-ee dependency-injection junit4

如何对ProcessorBean进行单元测试? 由于我只是不想测试ProcessorBean而不是Dao,我需要存根或模拟Dao,但我不知道如何使用Junit来做到这一点。

我正在使用Junit4和Ejb3.0

@Stateless
public class ProcessorBean {

    @EJB
    private Dao dao;

    public void process() {
        //logic to be tested
    }
}

2 个答案:

答案 0 :(得分:3)

OpenEJB中有一些支持,你可能会觉得它与模拟结合起来很有用。

作为EJB 3.0 Embedded EJBContainer API的替代方案,您只需在代码中构建应用程序。

import junit.framework.TestCase;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.StatelessBean;
import org.apache.openejb.junit.ApplicationComposer;
import org.apache.openejb.junit.Module;
import org.junit.Test;
import org.junit.runner.RunWith;

import javax.ejb.EJB;

@RunWith(ApplicationComposer.class)
public class ProcessorBeanTest extends TestCase {

    @EJB
    private ProcessorBean processorBean;

    @Module
    public EjbJar beans() {
        EjbJar ejbJar = new EjbJar();
        ejbJar.addEnterpriseBean(new StatelessBean(ProcessorBean.class));
        ejbJar.addEnterpriseBean(new StatelessBean(MockDao.class));
        return ejbJar;
    }

    @Test
    public void test() throws Exception {

        // use your processorBean

    }
}

在这里,我们看到ApplicationComposer运行的测试用例。它是JUnit测试运行器的简单包装器,用于查找可用于定义应用程序的@Module方法。

这实际上是OpenEJB多年来所做的所有内部测试以及我们决定在最近几个版本(从3.1.3开始)开放的内容。它超越了强大而且非常快,因为它削减了类路径扫描和一些较重的部署部分。

maven依赖关系可能如下所示:

  <dependencies>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>javaee-api</artifactId>
      <version>6.0-3-SNAPSHOT</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.1</version>
      <scope>test</scope>
    </dependency>
    <!--
    The <scope>test</scope> guarantees that none of your runtime
    code is dependent on any OpenEJB classes.
    -->
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-core</artifactId>
      <version>4.0.0-beta-1</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

答案 1 :(得分:1)

如果要模拟任何对象或创建其存根,可以使用其他库,例如Mockito。它允许您非常轻松地模拟任何类甚至接口。

补充阅读: