модульное тестирование ejb3.0, в которое вставлен другой ejb - PullRequest
5 голосов
/ 03 января 2012

Как мне выполнить модульное тестирование ProcessorBean? Так как я не хочу тестировать ProcessorBean, а не Dao, мне нужно заглушить или высмеять Dao, но я понятия не имею, как я могу это сделать с помощью Junit.

Я использую Junit4 и Ejb3.0

@Stateless
public class ProcessorBean {

    @EJB
    private Dao dao;

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

Ответы [ 2 ]

3 голосов
/ 03 января 2012

В 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 голос
/ 03 января 2012

Если вы хотите смоделировать какой-либо объект или создать его заглушку, вы можете использовать дополнительную библиотеку, например, Mockito . Это позволяет очень легко издеваться над любым классом или даже интерфейсом.

Дополнительное чтение:

...