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

Sve*_*ven 5 unit-testing dependency-injection junit4 java-ee

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

我正在使用Junit4和Ejb3.0

@Stateless
public class ProcessorBean {

    @EJB
    private Dao dao;

    public void process() {
        //logic to be tested
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ins 3

您可能会发现 OpenEJB 中的一些支持与模拟结合起来很有用。

作为 EJB 3.0 嵌入式 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

    }
}
Run Code Online (Sandbox Code Playgroud)

在这里我们看到一个由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>
Run Code Online (Sandbox Code Playgroud)