Cómo lograr mejores pruebas
-
Upload
andreina-romero -
Category
Software
-
view
572 -
download
0
Transcript of Cómo lograr mejores pruebas
![Page 1: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/1.jpg)
Cómo lograr mejores pruebas
Andreína Romero@andreinaromero
![Page 2: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/2.jpg)
Cómo lograr mejores pruebas
Agenda• Pruebas Unitarias• Pruebas Funcionales• Buenas prácticas • Sobre pruebas unitarias • Sobre pruebas funcionales
• Pruebas que aportan valor al negocio
![Page 3: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/3.jpg)
Cómo lograr mejores pruebas
Pruebas Unitarias
![Page 4: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/4.jpg)
Cómo lograr mejores pruebas
Pruebas Funcionales
Puede volar
La cámara se mantiene estable Direcciona correctamente
Se maneja a control remoto
![Page 5: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/5.jpg)
Cómo lograr mejores pruebas
Escenario de implementación de pruebas7:00 am
4:45 pm 5:00 pm
Tests“Quick and dirty”
![Page 6: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/6.jpg)
Código LimpioPráctica I
![Page 7: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/7.jpg)
Cómo lograr mejores pruebas
Código de implementación de las pruebas LIMPIO
Que sea legible
Que sea legible
Que sea legible
![Page 8: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/8.jpg)
Cómo lograr mejores pruebas
Simples y Expresivas
![Page 9: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/9.jpg)
Cómo lograr mejores pruebas
@Testpublic void pruebaDirty() { EmployeeDao employeeDao = mock(EmployeeDao.class); Employee e = new Employee(); e.setName("Andreína"); e.setLastName("Romero"); e.setMiddleName("del Valle"); e.setCity("Medelin"); e.setOccupation("Computación"); EmployeeService s = new EmployeeService(); s.createEmployee(e); verify(employeeDao).saveEmployee(e);}
No legible
![Page 10: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/10.jpg)
Cómo lograr mejores pruebas
@Testpublic void pruebaClean() { Employee anEmployee = anEmployee().build(); employeeService.createEmployee(anEmployee); verify(employeeDao).saveEmployee(anEmployee);}
Legible
![Page 11: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/11.jpg)
Principio F.I.R.S.T.Práctica 2
![Page 12: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/12.jpg)
Cómo lograr mejores pruebas
F astI ndependentR epeatableS elf-ValidatingT imely
![Page 13: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/13.jpg)
Cómo lograr mejores pruebas
@Testpublic void pruebaNoRepetible() { ProductoAlmacen producto = new ProductoAlmacen(); producto.setFechaVencimiento("24/10/2015"); Boolean estaVencido = producto.estaVencido(); assertTrue(estaVencido);}
No repetible
![Page 14: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/14.jpg)
Cómo lograr mejores pruebas
public class ProductoAlmacen {
public Boolean estaVencido() {Calendar calendar = Calendar.getInstance(); return calendar.getTime().equals(this.getFechaVencimiento());}//.....
No repetible
![Page 15: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/15.jpg)
Cómo lograr mejores pruebas
@Testpublic void pruebaRepetible() { ProductoAlmacen producto = new ProductoAlmacen(); producto.setFechaVencimiento("24/10/2015"); Timer timer = mock(Timer.class); when(timer.getFechaHoy()).thenReturn("24/10/2015"); Boolean estaVencido = producto.estaVencido(); assertTrue(estaVencido);}
Repetible
![Page 16: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/16.jpg)
Cómo lograr mejores pruebas
public class ProductoAlmacen {
public Boolean estaVencido() { Date fechaHoy = convertirDateAString(this.timer.getFechaHoy()); return fechaHoy.equals(this.getFechaVencimiento());}
//.....
Repetible
![Page 17: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/17.jpg)
Patrón AAAPráctica 3
![Page 18: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/18.jpg)
Cómo lograr mejores pruebas
ArrangeActAssert
![Page 19: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/19.jpg)
Cómo lograr mejores pruebas
String macroP = "cotizaciones";String microP = "informacionFinanciera";String sec = "informacionBasicaCotizacion";String campo = "label_informacion_cotizacion";List<String> dato = new ArrayList<String>();dato.add(macroP);dato.add(microP);dato.add(sec);dato.add(campo);StringBuilder sb = new StringBuilder();int j = dato.size() - 1;for (int i = 0; i < j; i++) { sb.append(dato.get(i)); if ((dato.size()-1) > (i)){ sb.append("_"); } }Facade fac = new FacadeCotizacion();fac.filtrarCotizaciones("es", sb.toString());
Sin patrón AAA
![Page 20: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/20.jpg)
Cómo lograr mejores pruebas
@Testpublic void pruebaConPatronAAA() { // Arrange StringBuilder filtroBusquedaCotizacion = obtenerFiltroBusquedaCotizacion(); // Act OperacionBusquedaFachada fachada = new OperacionBusquedaFachada(); List<String> resultadosFiltro = fachada.filtrarOpcionesBusqueda("es", filtroBusquedaCotizacion); // Assert assertEquals(5, resultadosFiltro.size());}
Con patrón AAA
![Page 21: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/21.jpg)
API de dominioPráctica 4
![Page 22: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/22.jpg)
Cómo lograr mejores pruebas
Un Blog
Validador Ortografía
Publicador
Formateador texto
![Page 23: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/23.jpg)
Cómo lograr mejores pruebas
Parrafo parrafo1 = new Parrafo();parrafo1.addLinea("Las pruebas deben tener un código limpio.");parrafo1.addLinea("Las pruebas deben ser simples y expresivas.");Parrafo parrafo2 = new Parrafo();parrafo1.addLinea("Las pruebas deben cumplir el principio FIRST");parrafo1.addLinea("Las pruebas unitarias deben ejecutarse rapidamente");Parrafo parrafo3 = new Parrafo(); //..List<Parrafo> parrafos = new ArrayList<Parrafo>();parrafos.add(parrafo1);parrafos.add(parrafo2);parrafos.add(parrafo3);//..ValidadorOrtografia validadorOrtografia= new ValidadorOrtografia();List<Error> errores = validadorOrtografia.detectarErroresOrtografia(parrafos);assertEquals("error1", errores.get(0));//..
Sin API de Dominio
![Page 24: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/24.jpg)
Cómo lograr mejores pruebas
@Testpublic void pruebaConApiDominio() { List<Parrafo> parrafos = crearEntradaBlog(); ValidadorOrtografia validadorOrtografia = new ValidadorOrtografia(); List<Error> errores = validadorOrtografia.detectarErroresOrtografia(parrafos); verificarErroresEnEntradaBlog(errores);}
Usando API de Dominio
![Page 25: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/25.jpg)
1 Concepto x TestPráctica 5
![Page 26: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/26.jpg)
Cómo lograr mejores pruebas
Sostenga LíquidoSe pueda
sostener sin quemarse
Sostenga líquido caliente
Se pueda tomar sin derramar
![Page 27: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/27.jpg)
Cómo lograr mejores pruebas
Se validan todas las funcionalidades
Verificar que el líquido no se derrame
Verificar que sostenga líquido caliente
Verificar que al sostener la taza no se pase el calor
Verificar que se puede tomar de ella sin que se derrame
![Page 28: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/28.jpg)
Cómo lograr mejores pruebas
Se validan por separadoVerificar que el líquido no se derrame
Verificar que sostenga líquido caliente
No se sienta el calor
No se derrame al tomar de ella
![Page 29: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/29.jpg)
Cómo lograr mejores pruebas
@Testpublic void pruebaConDosConceptos() { CarreraService service = new CarreraService(); Carrera carrera = new Carrera(); String codigoCarrera = service.createCarrera(carrera); assertEquals("24102015", codigoCarrera); Carrera carreraEncontrada = service.consultarCarrera(codigoCarrera); assertEquals("Pruebas Ágiles", carreraEncontrada.getNombre());}
Dos conceptos en la prueba
![Page 30: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/30.jpg)
¿Cómo vamos hasta aquí?
![Page 31: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/31.jpg)
Datos exclusivos para pruebasPráctica 6
![Page 32: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/32.jpg)
Cómo lograr mejores pruebas
Única base de datos
PedroDiana
![Page 33: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/33.jpg)
Cómo lograr mejores pruebas
Jenkins
Única base de datos
![Page 34: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/34.jpg)
Cómo lograr mejores pruebas
Datos exclusivos para pruebas
Base de datos Desarrollo Base de datos Pruebas
![Page 35: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/35.jpg)
Page ObjectPráctica 7
![Page 36: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/36.jpg)
Cómo lograr mejores pruebas
Patrón Page Object
Nombre Paciente:
Documento:
Buscar Cita
public class BusquedaCitaPage {public void ingresarNombrePaciente() { //...}
public void ingresarDocumentoIdentidad() { //...}public void clicBuscarCita() { //...}}
CLASE TEST
![Page 37: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/37.jpg)
Criterios de Aceptación Bien DefinidosPráctica 8
![Page 38: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/38.jpg)
Cómo lograr mejores pruebas
Escenario acoplado a la interfazGiven Estoy en la pagina de Condiciones de Uso
When Hago clic en el botón "btn_LeerTerminos"
And Hago scroll down
And Hago touch en el enlace "Aceptar Terminos"
And Hago touch en el enlace "Imprimir en PDF" nombrado "link_print_pdf" en la posición 1
Then Se muestra el pdf TerminosYCondiciones.pdf
![Page 39: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/39.jpg)
Cómo lograr mejores pruebas
Escenario definido en términos de negocio
Given Estoy en la pagina de Aceptación de la Aplicación Cuadrantes
When Acepto los Términos y Condiciones
And Selecciono la opción "Imprimir en PDF"
Then Se muestra el pdf "TerminosYCondiciones.pdf"
![Page 40: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/40.jpg)
Pruebas que aportan valor
![Page 41: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/41.jpg)
Bootstrap
Código legacy
Pruebas que aportan valor
![Page 42: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/42.jpg)
Cómo lograr mejores pruebas
@Testpublic void pruebaNoAportaMuchoValor() { assertNotNull(Calendar.getInstance().getTime());}
No aporta valor al negocio
![Page 43: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/43.jpg)
Cómo lograr mejores pruebas
public class BuscadorServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse res) throws ServletException, IOException { String forwardTo = null; forwardTo = getUrlForward(request); res.sendRedirect(forwardTo); } public String getUrlForward(HttpServletRequest request) { String forwardTo = null; int codigoMapeoMenu = getCodigoUsuario(request); switch (codigoMapeoMenu) { case CodigoMenu.BUSCADOR_PERSONANATURAL: forwardTo = "/servlet/" + BuscadorPersonaNaturalServlet.class.getName(); break; case CodigoMenu.BUSCADOR_PERSONAJURIDICA: forwardTo = "/servlet/" + BuscadorPersonaJuridicaServlet.class.getName(); break; case CodigoMenu.BUSCADOR_BENEFICIARIO: forwardTo = "/servlet/" + BuscadorBeneficiarioServlet.class.getName(); break; } return forwardTo;}
Un servlet
![Page 44: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/44.jpg)
Cómo lograr mejores pruebas
@Testpublic void pruebaForwardCodigo001() { BuscadorServlet servlet= new BuscadorServlet(); HttpServletRequest req = Mockito.mock(HttpServletRequest.class); Mockito.when(req.getParameter("id_codigo:_usuario")).thenReturn("001"); assertEquals("/servlet/BuscadorPersonaNaturalServlet", servlet.getUrlForward(req));}
No aporta valor al negocio
![Page 45: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/45.jpg)
Cómo lograr mejores pruebas
function validarFormulario(evObject) { evObject.preventDefault(); var todoCorrecto = true; var formulario = document.formularioContacto; for (var i=0; i<formulario.length; i++) { if(formulario[i].type =='text') { if (formulario[i].value == null || formulario[i].value.length == 0 || /^\s*$/.test(formulario[i].value)) { alert (formulario[i].name + ' no puede estar vacío o contener sólo espacios en blanco'); todoCorrecto=false; } } if (todoCorrecto ==true) { formulario.submit(); }}
Validaciones en javascript
![Page 46: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/46.jpg)
Cómo lograr mejores pruebas
public Taxi(String nombreCiudad, String valorMatricula, String valorTipoMotor) { this.setCiudad("México D.F."); this.setMatricula(valorMatricula); this.setTipoMotor(valorTipoMotor);}
Prueba de constructores
![Page 47: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/47.jpg)
Cómo lograr mejores pruebas
Enfocarse en la lógica de negocio
![Page 48: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/48.jpg)
Cómo lograr mejores pruebas
¿Cuáles pruebas aportan valor? Las pruebas que validen las reglas de negocio.
Se puede comenzar por la funcionalidad principal y así sucesivamente ir cubriendo funcionalidades
AGILE
![Page 49: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/49.jpg)
¿Qué podemos concluir?
![Page 50: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/50.jpg)
Cómo lograr mejores pruebas
Conclusión
Pruebas “Quick and Dirty”
Equipo estimará mayor tiempo
Product Owner forzado a obviar
las pruebas
El equipo temerá refactorizar
Código de producción deteriorado
![Page 51: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/51.jpg)
Cómo lograr mejores pruebas
Tomarse un tiempo para las pruebas
![Page 53: Cómo lograr mejores pruebas](https://reader031.fdocuments.ec/reader031/viewer/2022021507/58ef71f11a28ab40708b460d/html5/thumbnails/53.jpg)
Cómo lograr mejores pruebas
¿Dudas?