Testing (Progresivo)
Realmente una parte fundamental del desarrollo de aplicaciones la implementaciòn de pruebas, en el mundo Java se cuentan con muchas herramientas. (TDD, BDD, ATDD).
Entre algunos :
Que ocurriría si alteramos la forma de hacer los test en un entorno JavaEE que usa EJB:
Ejemplos:
Tabla:
@Test
public String findAll() {
List<Color> colorList = colorRepository.findAll();
unitTest.assertEquals("findAll", 1, colorList.size());
unitView.formTitle("findAll()");
unitView.tableHeader(Arrays.asList(new RowView("idcolor"), new RowView("activo")));
colorRepository.findAll().forEach((c) -> {
unitView.tableCol(Arrays.asList(new ColView(c.getIdcolor()), new ColView(c.getActivo())));
});
unitView.tableClose();
return "";
}
Realmente una parte fundamental del desarrollo de aplicaciones la implementaciòn de pruebas, en el mundo Java se cuentan con muchas herramientas. (TDD, BDD, ATDD).
Entre algunos :
- JUnit
- Arquillian
- Selenium
- JCucumber,
- Mockito,
- EasyMock
Muchas veces creamos un entorno embebido para ejecutar pruebas (Arquillian), Antonio Gongalves
escribio un blog : Java EE vs Spring Testing.
Donde explicaba la complejidad de hacer los test y la viabilidad de los mismos.
Conocemos la situación actual con EJB el movimiento de Java EE a EE4J, la era de microservicios, muchas implementaciones han cambiado, una forma nueva de desarrollar aplicaciones y consumir data. (Rest-Ful, JAX-RS, bases de datos NoSQL).
Que ocurriría si alteramos la forma de hacer los test en un entorno JavaEE que usa EJB:
- Hacer los test en entornos de ejecución y no en entornos embebidos.(Tendríamos un entorno real para las pruebas).
- Hacer test progresivos, tendríamos un esquema de adaptación mas ágil.
- Generar las interfaces en base a los test(Tal vez ayudaría al equipo a entender la vista de una pagina que no paso un test), seria componer interfaces en base a testing.
Componentes:
- Proyecto Java EE
- Proyecto EJB que contiente los Entity y Repository
- PayaraMicro (Podria implementar con otro)
- Framework de Test
Modelo:
- Utilizamos dos clases
- UnitTest : Para reporte del test
- UnitView: Para generar interfaces desde los test.
Ejemplos:
Test Simple
@Test
public String save() {
try {
//Mock
Color color = new Color();
color.setActivo("si");
color.setAutoincrementable(15);
color.setIdcolor("rojo");
List<UserInfo> list = new ArrayList<>();
color.setUserInfo(list);
Boolean expResult = true;
unitTest.assertEquals("save", true, colorRepository.save(color));
} catch (Exception e) {
System.out.println("save() " + e.getLocalizedMessage());
}
return "";
}
Reportes
Ejemplo de una ejecuciòn
Test diseñando una interface.
El equipo de Testing, crea el Test y genera una interfaz de como seria la aplicaciòn final.
@Test
public String save() {
try {
// unitView.message("Testeando save()");
//Mock
Color color = new Color();
color.setActivo("si");
color.setAutoincrementable(15);
color.setIdcolor("rojo");
List<UserInfo> list = new ArrayList<>();
color.setUserInfo(list);
Boolean expResult = true;
Boolean save = unitTest.assertEquals("save", true, colorRepository.save(color));
/*
Dibuja la interfaz
*/
unitView.form();
unitView.formTitle("Registros de colores");
unitView.panel();
unitView.panelAddInputText(Arrays.asList(new InputText("idcolor", color.getIdcolor()),
new InputText("activo", color.getActivo())));
unitView.panelClose();
unitView.buttonGreen("Save");
unitView.formClose();
if (save) {
unitView.message("se guardo exitosamente");
} else {
unitView.error("No se pudo guardar");
}
} catch (Exception e) {
System.out.println("save() " + e.getLocalizedMessage());
}
return "";
}
Ejecución:
Genera el resultado del Test y muestra la interface.
Tabla:
@Test
public String findAll() {
List<Color> colorList = colorRepository.findAll();
unitTest.assertEquals("findAll", 1, colorList.size());
unitView.formTitle("findAll()");
unitView.tableHeader(Arrays.asList(new RowView("idcolor"), new RowView("activo")));
colorRepository.findAll().forEach((c) -> {
unitView.tableCol(Arrays.asList(new ColView(c.getIdcolor()), new ColView(c.getActivo())));
});
unitView.tableClose();
return "";
}
Comments