-
Notifications
You must be signed in to change notification settings - Fork 14
Prueba de la lógica
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.
@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());
}
@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);
}
}
@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());
}
@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());
}
@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);
}
Esta wiki fue creada para el curso ISIS2603 Desarrollo de Software en Equipos en la Universidad de los Andes. Desarrollado por Rubby Casallas con la colaboración de César Forero, Kelly Garcés, Jaime Chavarriaga y José Bocanegra. Universidad de los Andes, Bogotá, Colombia. 2021.
- Instalación del ambiente en máquina propia
- Configuración de la máquina virtual
- Ejecución del back
- Uso de Codespaces
- Clases
- Herencia
- Asociaciones
- Tipos de asociaciones
- Caso de estudio: la biblioteca
- Caso de estudio: la empresa
- Java Persistence API (JPA)
- Implementación paso a paso persistencia
- Ejemplo implementación persistencia
- Carga de datos en el Backend
- Relaciones compartidas (Shared) OneToOne
- Relaciones compartidas (Shared) OneToMany/ManyToOne
- Relaciones compuestas (Composite) OneToMany/ManyToOne
- Conceptos básicos de REST
- Diseño API REST
- Tutorial documentación diseño API
- Implementación API REST con Spring
- Tutorial implementación API