Test of JEE Applications with Arquillian - Implementation of a Test with a generic Service

Create a generic abstract class for features available in all test-classes

An abstract class provides standard-functionality for transaction handling. The generic-abstract-class pattern forces the developer to define the EJB-service under test.

package de.starwit.lirejarp.ejb;

import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;

@SuppressWarnings("rawtypes")
public abstract class AbstractServiceTest<E extends AbstractService> {
 
 
protected static EntityManager em;
 
protected static EntityManagerFactory emf;
 
protected E service;

   
@BeforeClass
   
public static void setupBeforeClass() {
       
emf = Persistence.createEntityManagerFactory("MeineJpaPU");
        em = emf.createEntityManager
();
   
}

 
@AfterClass
   
public static void TearDownAfterClass() {
       
emf.close();
   
}
 
   
@Before
   
public void setup() {
     
if (getService().getEntityManager() == null) {
       
getService().setEntityManager(em);
     
}
     
beginTransaction();
   
}
   
   
@After
   
public void tearDown() {  
     
closeTransaction();
   
}

   
public void beginTransaction() {
       
em.getTransaction().begin();
   
}
   
   
public void closeTransaction() {
       
if (em.getTransaction().isActive()) {
           
em.getTransaction().rollback();
       
}

       
if (em.isOpen()) {
           
em.close();
       
}
    }

 
@Inject
   
public abstract void setService(E service);

   
public E getService() {
   
return service;
 
}
  
}

Implement a test

For instance you want to test the "create"-methode of a CategoryService-EJB.

package de.starwit.lirejarp.ejb;

import org.jboss.arquillian.junit.Arquillian;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

import de.starwit.lirejarp.entity.CategoryEntity;

@RunWith(Arquillian.class)
public class CategoryServiceTest extends AbstractServiceTest<CategoryService> {


 
@Override
 
public void setService(CategoryService service) {
   
this.service = service;
 
}
 
 
@Test
 
public void addCategory() {
   
CategoryEntity category = new CategoryEntity();
    category.setName
("Politics");
    category = getService
().create(category);
    Assert.assertNotNull
(category.getId());
 
}
 
}

Keine Kommentare :

Kommentar veröffentlichen