Skip to content

Prueba de la lógica

José Bocanegra edited this page Feb 12, 2020 · 1 revision

Para realizar la prueba de la lógica, se debe crear una nueva clase, en este caso la clase CityLogicTest, la cual se agrega al paquete Test/Logic.

Se inicia anotando la clase con @RunWith(Arquillian.class)

@RunWith(Arquillian.class)
public class CityLogicTest 

A continuación se debe hacer uso de una inyección de dependencia de la clase CityLogic. Eso se realiza para dejar que el contenedor de EJB sea quien se encargue del ciclo de vida del objeto.

@Inject
private CityLogic cityLogic;

Luego se define el entity manager:

@PersistenceContext
private EntityManager em;

El siguiente paso es definir un manejador para la transacción:

@Inject
UserTransaction utx;

Para la carga inicial de los datos, se define una lista auxiliar de entidades:

private List<CityEntity> data = new ArrayList<>();

Luego, se incluye un método createDeployment que se encargará de hacer el despliegue de la aplicación. Este método se debe anotar con @Deployment.

@Deployment
public static JavaArchive createDeployment() {
    return ShrinkWrap.create(JavaArchive.class)
            .addPackage(CityEntity.class.getPackage())
            .addPackage(CityPersistence.class.getPackage())
            .addPackage(CityLogic.class.getPackage())
            .addAsManifestResource("META-INF/persistence.xml", "persistence.xml")
            .addAsManifestResource("META-INF/beans.xml", "beans.xml");
}

Antes de ejecutar la prueba se requiere iniciar una transacción, limpiar los datos que puedan existir en la tabla CityEntity, insertar datos de prueba y hacer commit a la transacción. Para ello se incluye un método configTest, anotado con @Before.

@Before
public void configTest() {
    try {
        utx.begin();
        em.joinTransaction();
        clearData();
        insertData();
        utx.commit();
    } catch (Exception e) {
        e.printStackTrace();
        try {
            utx.rollback();
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }
}

/**
    * Limpia las tablas que están implicadas en la prueba.
*/
private void clearData() {
    em.createQuery("delete from CityEntity").executeUpdate();
}

/**
    * Inserta los datos iniciales para el correcto funcionamiento de las
    * pruebas.
*/
private void insertData() {
    PodamFactory factory = new PodamFactoryImpl();
    for (int i = 0; i < 3; i++) {
        CityEntity entity = factory.manufacturePojo(CityEntity.class);

        em.persist(entity);
        data.add(entity);
    }
}

A continuación se definen las pruebas para crear una ciudad, obtener la lista de ciudades, consultar los datos de una ciudad en particular, actualizar una ciudad y eliminar una ciudad.

Crear una ciudad

@Test
public void createCityTest() throws BusinessLogicException {
    CityEntity newEntity = factory.manufacturePojo(CityEntity.class);
    CityEntity result = cityLogic.createCity(newEntity);
    Assert.assertNotNull(result);
    
    CityEntity entity = em.find(CityEntity.class, result.getId());
    Assert.assertEquals(newEntity.getId(), entity.getId());
    Assert.assertEquals(newEntity.getName(), entity.getName());
    
}

Obtener la lista de ciudades

@Test
public void getCitiesTest() {
    List<CityEntity> list = cityLogic.getCities();
    Assert.assertEquals(data.size(), list.size());
    for (CityEntity entity : list) {
        boolean found = false;
        for (CityEntity storedEntity : data) {
            if (entity.getId().equals(storedEntity.getId())) {
                found = true;
            }
        }
        Assert.assertTrue(found);
    }
}

Obtener una ciudad en particular

@Test
public void getCity(Long cityId) {
    CityEntity entity = data.get(0);
    CityEntity resultEntity = cityLogic.getCity(entity.getId());
    Assert.assertNotNull(resultEntity);
    Assert.assertEquals(entity.getId(), resultEntity.getId());
    Assert.assertEquals(entity.getName(), resultEntity.getName());
}

Actualizar una ciudad

@Test
public void updateCityTest() {
    CityEntity entity = data.get(0);
    CityEntity pojoEntity = factory.manufacturePojo(CityEntity.class);

    pojoEntity.setId(entity.getId());

    cityLogic.updateCity(pojoEntity.getId(), pojoEntity);

    CityEntity resp = em.find(CityEntity.class, entity.getId());

    Assert.assertEquals(pojoEntity.getId(), resp.getId());
    Assert.assertEquals(pojoEntity.getName(), resp.getName());
}

Actualizar una ciudad

@Test
public void deleteCityTest() throws BusinessLogicException {
    CityEntity entity = data.get(0);
    cityLogic.deleteCity(entity.getId());
    CityEntity deleted = em.find(CityEntity.class, entity.getId());
    Assert.assertNull(deleted);
}
Clone this wiki locally