Anotar la clase de pruebas con:
@RunWith(Arquillian.class)
Importar:
import org.jboss.arquillian.junit.Arquillian;
import org.junit.runner.RunWith;
Definir el método de la construcción del jar que contiene las clases que se van a probar. Este debe:
- Estar anotado por @Deployment
- Retornar un JavaArchive
- Incluir todos los archivos que se necesitan para las prueba.
Se debe importar:
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
package co.edu.uniandes.csw.nombreproyecto.persistence;
import co.edu.uniandes.csw.company.entities.XYZEntity;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
public class XYZPersistenceTest {
/**
*
* @return Devuelve el jar que Arquillian va a desplegar en el Glassfish
* embebido. El jar contiene las clases de XYZ, el descriptor de la
* base de datos y el archivo beans.xml para resolver la inyección de
* dependencias.
*/
@Deployment
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class)
.addPackage(XYZEntity.class.getPackage())
.addPackage(XYZPersistence.class.getPackage())
.addAsManifestResource("META-INF/persistence.xml", "persistence.xml")
.addAsManifestResource("META-INF/beans.xml", "beans.xml");
}
public XYZPersistenceTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
/**
* Test of find method, of class XYZPersistence.
*/
@Test
public void testFind() throws Exception {
fail("testFind");
}
/**
* Test of findByName method, of class XYZPersistence.
*/
@Test
public void testFindByName() throws Exception {
fail("testFindByName");
}
/**
* Test of findAll method, of class XYZPersistence.
*/
@Test
public void testFindAll() throws Exception {
fail("testFindAll");
}
/**
* Test of create method, of class XYZPersistence.
*/
@Test
public void testCreate() throws Exception {
fail("testCreate");
}
/**
* Test of update method, of class XYZPersistence.
*/
@Test
public void testUpdate() throws Exception {
fail("testUpdate");
}
/**
* Test of delete method, of class XYZPersistence.
*/
@Test
public void testDelete() throws Exception {
fail("testDelete");
}
}
Declarar las variables que se requieren para las pruebas e importar los paquetes necesarios:
persistence
: es el objeto de la clase que se va a probar. El contenedor inyectará una instancia de esta clase.em
: un EntityManager para verificar los datos directamente sobre la base de datosutx
: un UserTransactions para manipular los datos directamente sobre la base de datosdata
: este arreglo contendrá el conjunto de datos de prueba
/**
* Inyección de la dependencia a la clase XYZPersistence cuyos métodos
* se van a probar.
*/
@Inject
private XYZPersistence persistence;
/**
* Contexto de Persistencia que se va a utilizar para acceder a la Base de
* datos por fuera de los métodos que se están probando.
*/
@PersistenceContext
private EntityManager em;
/**
* Variable para martcar las transacciones del em anterior cuando se
* crean/borran datos para las pruebas.
*/
@Inject
UserTransaction utx;
/**
*
*/
private List<XYZEntity> data = new ArrayList<XYZEntity>();
Este método setUp
anotado con @Before
se ejecutará antes de cada prueba.
- Llama
clearData()
que Borra los datos en la base de datos directamente utilizando elEntityManager
y laUserTransaction
- Llama
insertData()
que Crea nuevos datos
@Before
public void setUp() {
try {
utx.begin();
em.joinTransaction();
clearData();
insertData();
utx.commit();
} catch (Exception e) {
e.printStackTrace();
try {
utx.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
- Llama
clearData()
que Borra los datos en la base de datos directamente utilizando el EntityManager y la UserTransaction - Llama
insertData()
que Crea nuevos datos .- Los nuevos datos son creados utilizando Podam quien crea datos aleatorios.
- Los datos que se crean son de la clase
XYZEntity
.
private void clearData() {
em.createQuery("delete from XYZEntity").executeUpdate();
}
private void insertData() {
PodamFactory factory = new PodamFactoryImpl();
for (int i = 0; i < 3; i++) {
XYZEntity entity = factory.manufacturePojo(XYZEntity.class);
em.persist(entity);
data.add(entity);
}
}