En esta presentación se describen las buenas prácticas para las pruebas unitarias y funcionales desde el punto de vista de la experiencia adquirida en mi lugar de trabajo
2. 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
4. Cómo lograr mejores pruebas
Pruebas Funcionales
Puede volar
La cámara se mantiene
estable
Direcciona correctamente
Se maneja a control remoto
5. Cómo lograr mejores pruebas
Escenario de implementación de pruebas
7:00 am
4:45 pm 5:00 pm
Tests
“Quick and dirty”
26. Cómo lograr mejores pruebas
Sostenga Líquido
Se pueda
sostener sin
quemarse
Sostenga líquido
caliente
Se pueda tomar
sin derramar
27. 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
28. Cómo lograr mejores pruebas
Se validan por separado
Verificar 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
29. Cómo lograr mejores pruebas
@Test
public 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
36. 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
38. Cómo lograr mejores pruebas
Escenario acoplado a la interfaz
Given 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
39. 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"
42. Cómo lograr mejores pruebas
@Test
public void pruebaNoAportaMuchoValor() {
assertNotNull(Calendar.getInstance().getTime());
}
No aporta valor al negocio
43. 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
44. Cómo lograr mejores pruebas
@Test
public 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
45. 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
48. 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
50. 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