32
Introducción al Testing Unitario @JuanmaGomeR

Introducción al testing unitario

Embed Size (px)

DESCRIPTION

Tips y buenas prácticas sobre testing unitario. Introducc

Citation preview

Page 1: Introducción al testing unitario

Introducción al Testing Unitario

@JuanmaGomeR

Page 2: Introducción al testing unitario

Preguntas Frecuentes

¿Cómo pruebo un test que no devuelve nada?

public void tell_dont_ask_principle(params…)

@JuanmaGomeR

Page 3: Introducción al testing unitario

Preguntas Frecuentes

¿Cómo debo probar los métodos get/set?

public String getAlmuerzo() {return almuerzo;

}

public void setAlmuerzo(String…)@JuanmaGomeR

Page 4: Introducción al testing unitario

Preguntas Frecuentes

¿Dónde colocar mis test?

Carpeta, paquete...

@JuanmaGomeR

Page 5: Introducción al testing unitario

Preguntas Frecuentes

¿Cómo testear los métodos privados?

private Algo privateMethod(params…) {...}

@JuanmaGomeR

Page 6: Introducción al testing unitario

Preguntas Frecuentes

¿Cómo de simple es un método para decir que es demasiado

simple para testear?

@JuanmaGomeR

Page 7: Introducción al testing unitario

Preguntas Frecuentes

¿Cada cuanto tiempo ejecutar mis tests?

Cambio, commit, minuto, hora, día, año, década...

@JuanmaGomeR

Page 8: Introducción al testing unitario

Testing UnitarioClaves del test unitario

@JuanmaGomeR

Page 9: Introducción al testing unitario

Tests Unitarios

Prueban una funcionalidad concreta

@JuanmaGomeR

Page 10: Introducción al testing unitario

Tests Unitarios

Se basan en el principio de responsabilidad única: cada

método tiene una única responsabilidad, y esa

responsabilidad es la que pruebo @JuanmaGomeR

Page 11: Introducción al testing unitario

Tests Unitarios

Deben ser independientes de los datos puesto que no probamos datos, sino

funcionalidad @JuanmaGomeR

Page 12: Introducción al testing unitario

Tests Unitarios

Son repetibles en el tiempo

@JuanmaGomeR

Page 13: Introducción al testing unitario

Tests Unitarios

Sólo prueban los métodos públicos del SUT (System Under

Test)@JuanmaGomeR

Page 14: Introducción al testing unitario

Tests Unitarios

No se hacen uso de dependencias de la

clase a probarSi no, serían test de integración

@JuanmaGomeR

Page 15: Introducción al testing unitario

Otros tests

● Integración: prueban la conexión entre componentes. Debería ser el siguiente paso al test unitario.

●Funcionales: prueban la integración de todos los componentes que desarrollan una funcionalidad.

●Regresión: prueban que los SUT siguen funcionando a lo largo del tiempo (IC)

●Carga: prueban la eficiencia del código

@JuanmaGomeR

Page 16: Introducción al testing unitario

Testing Unitario¿Cómo diseñar un test unitario?

@JuanmaGomeR

Page 17: Introducción al testing unitario

System Under Test (SUT)

●Es el sistema que vamos a probar. ●Probamos los métodos públicos:○ Interface de nuestro SUT al mundo exterior

● ¿Los métodos privados no?○Relocalizar en otra parte del SUT o del sistema○PrivilegedAccessor

@JuanmaGomeR

Page 18: Introducción al testing unitario

¿Cómo diseñar un test unitario?

Un test unitario es independiente de los demás y del entorno

@JuanmaGomeR

Page 19: Introducción al testing unitario

¿Cómo diseñar un test unitario?

Ejecución extremadamente

rápida

@JuanmaGomeR

Page 20: Introducción al testing unitario

¿Cómo diseñar un test unitario?

Su éxito no depende del orden de ejecución

de los demás tests

@JuanmaGomeR

Page 21: Introducción al testing unitario

¿Cómo diseñar un test unitario?

Son repetibles en el tiempo

@JuanmaGomeR

Page 22: Introducción al testing unitario

¿Cómo diseñar un test unitario?

Se deben pueden ejecutar de forma

automática

@JuanmaGomeR

Page 23: Introducción al testing unitario

Testing UnitarioAlgunas Buenas Prácticas

@JuanmaGomeR

Page 24: Introducción al testing unitario

Algunas Buenas Prácticas

@Testpublic void pruebo_un_metodo_get() {

String mi_dato = “Mi Dato”;

MiObjeto mi_objeto = new MiObjeto();

mi_objeto.set_mi_dato(mi_dato);

assertEquals(mi_dato, mi_objeto.get_mi_dato());}

@JuanmaGomeR

Page 25: Introducción al testing unitario

Algunas Buenas Prácticas

Escribir un test cuando solamente sea

necesario. NO cobertura 100%

@JuanmaGomeR

Page 26: Introducción al testing unitario

Algunas Buenas Prácticas

package es.miempresa.programa.producto.paquete

public class MiObjeto {package String que_eres() {

return “Soy tu objeto”;}

}

package es.miempresa.programa.producto.tests.paquete

public class MiObjetoTests {@Test public void si_te_pregunto_devuelves_soy_tu_objeto() {

assertEquals(“Soy tu objeto”, new MiObjeto().que_eres());}

}@JuanmaGomeR

Page 27: Introducción al testing unitario

Algunas Buenas Prácticas

Los tests están colocados en un lugar

representativo (mismo paquete, por ejemplo)

@JuanmaGomeR

Page 28: Introducción al testing unitario

Algunas Buenas Prácticas

@Testpublic void test_metodo1() {

String a = “soy tu objeto”;String b = “soy otra cadena”;String c = null;int num = (a==b);if(num) {

c=b;}assertEquals(a, new Agenda().getCamandulo().getB());

} @JuanmaGomeR

Page 29: Introducción al testing unitario

Algunas Buenas Prácticas

Fácilmente mantenibles y entendibles

Siguen siendo código fuente

@JuanmaGomeR

Page 30: Introducción al testing unitario

Algunas Buenas Prácticas

Prueban el qué y no el cómo

○Métodos públicos --> Qué○Métodos privados o protegidos --> Cómo 

@JuanmaGomeR

Page 31: Introducción al testing unitario

Algunas Buenas Prácticas

Test única funcionalidad: No If, while, for, ... dentro de un test unitario

Principio de responsabilidad única también para los tests

@JuanmaGomeR

Page 32: Introducción al testing unitario

¡MUCHAS GRACIAS!

@JuanmaGomeR