PDF de programación - JUNIT. Pruebas Unitarias

Imágen de pdf JUNIT. Pruebas Unitarias

JUNIT. Pruebas Unitariasgráfica de visualizaciones

Publicado el 10 de Septiembre del 2020
453 visualizaciones desde el 10 de Septiembre del 2020
889,2 KB
20 paginas
Creado hace 17a (20/02/2007)
JUNIT. Pruebas Unitarias

Dpto. de Ingeniería de Sistemas Telemáticos

http://www.lab.dit.upm.es/~lprg

Introducción

• Un programa es aceptable cuando:

– Hace lo que se acordó que debía hacer en las especificaciones.
– No hace lo que no debe hacer.

• “Un programador jamás debería entregar un programa sin
haberlo probado. Igualmente, quien recibe un programa de
otro jamás debería aceptarlo sin haberlo probado.

• Para aprobar una práctica ésta debe pasar las pruebas

funcionales.

• Cualquier funcionalidad de un programa sin una prueba

automatizada, simplemente no existe” (Extreme Programming
Explained”, de Kent Beck)

Febrero 2004

JUNIT. Pruebas Unitarias

2

1

Pruebas Unitarias Sistemáticas (1): Conceptos

• Prueba unitaria: una prueba individual de un método o clase.
• Prueba unitaria ad-hoc: por ejemplo, cuando creamos un objeto de

cierta clase con BlueJ e invocamos manualmente un método del mismo
con distintas entradas para ver si funciona.

• Sin embargo, con este tipo de pruebas no se puede trabajar eficiente y

sistemáticamente.

• Cada vez que cambiamos algo en el método o clase tendríamos que
volver a pasar todas las pruebas para asegurarnos de que “nada se ha
descabalado”. Es decir, realizar pruebas de regresión.

• Para ello, vendría muy bien algo que nos permitiera definir

sistemáticamente una serie de pruebas y ejecutarlas
automáticamente, tantas veces como necesitáramos.

• JUNIT nos permite hacer esto. JUNIT + BlueJ todavía mejor.

Febrero 2004

JUNIT. Pruebas Unitarias

3

Pruebas Unitarias Sistemáticas (2): Procedimiento

• Antes de implementar una determinada funcionalidad, piensa cómo
deberías probarla para verificar que se comporta correctamente. Esto
permite desarrollar la funcionalidad teniendo las ideas muy claras de lo
que debería hacer.

• Escribe el código que implementa la funcionalidad deseada.
• Escribe el código de las pruebas inmediatamente después.
• Ejecuta las pruebas que hiciste.
• Corrige la unidad de código que implementa la funcionalidad deseada

hasta que pase todas y cada una de las pruebas.

• Al añadir una nueva funcionalidad, repite el ciclo: piensa en cómo

probarla, codifica la funcionalidad, codifica las pruebas, ejecuta todas las
pruebas que hiciste (nuevas y viejas). No sigas hasta que el código pase
absolutamente todas las pruebas.

• Así una y otra vez para cada nueva funcionalidad que implementes. Lo

vemos con un ejemplo.

Febrero 2004

JUNIT. Pruebas Unitarias

4

2

Ejemplo Procedimiento Prueba con JUNIT (1)

• Desarrollar un método estático que tome un array de enteros como

argumento y devuelva el mayor valor encontrado en el array.

public class MayorNumero {

/**

* Devuelve el elemento de mayor valor de una lista
* @param list Un array de enteros
* @return

El entero de mayor valor de la lista

*/
public static int obt_mayorNumero(int lista[]) {

return 0; // para que compile hasta que desarrollemos el método

}

}

Febrero 2004

JUNIT. Pruebas Unitarias

5

Ejemplo Procedimiento Prueba con JUNIT (2)

• ¿Qué pruebas se te ocurren para el método obt_mayorNumero?
– ¿Qué ocurre para un array con valores cualesquiera (el caso

normal)?

[3, 7, 9, 8] → 9

– ¿Qué ocurre si el mayor elemento se encuentra al principio, en

medio o al final del array?

[9, 7, 8] → 9; [7, 9, 8] → 9; [7, 8, 9] → 9

– ¿Y si el mayor elemento se encuentra duplicado en el array?

[9, 7, 9, 8] → 9

– ¿Y si sólo hay un elemento en el array?

[7] → 7

– ¿Y si el array está compuesto por elementos negativos?

[-4, -6, -7, -22] → -4

Febrero 2004

JUNIT. Pruebas Unitarias

6

3

Ejemplo Procedimiento Prueba con JUNIT (3)

• Escribimos el código del método obt_mayorNumero:

/**
* Devuelve el elemento de mayor valor de una lista
*
* @param list Un array de enteros
* @return
*/
public static int obt_mayorNumero(int lista[]) {

El entero de mayor valor de la lista

int indice, max = Integer.MAX_VALUE;
for (indice = 0; indice < lista.length-1; indice++) {

if (lista[indice] > max) {

max = lista[indice];

}

}
return max;

}

Febrero 2004

JUNIT. Pruebas Unitarias

7

Ejemplo Procedimiento Prueba con JUNIT (4)

• Escribimos el código de las pruebas (1):

import junit.framework.*;

public class TestMayorNumero extends TestCase {

public TestMayorNumero() {
}

public void testSimple() {

assertEquals(9, MayorNumero.obt_mayorNumero(new int[] {3, 7, 9, 8}));

}

public void testOrden() {

assertEquals(9, MayorNumero.obt_mayorNumero(new int[] {9, 7, 8}));
assertEquals(9, MayorNumero.obt_mayorNumero(new int[] {7, 9, 8}));
assertEquals(9, MayorNumero.obt_mayorNumero(new int[] {7, 8, 9}));

}

// Sigue en la próxima transparencia

Febrero 2004

JUNIT. Pruebas Unitarias

8

4

Ejemplo Procedimiento Prueba con JUNIT (5)

• Escribimos el código de las pruebas (2):

// Sigue de la transparencia anterior

public void testDuplicados() {

assertEquals(9, MayorNumero.obt_mayorNumero(new int[] {9, 7, 9, 8}));

}

public void testSoloUno() {

assertEquals(7, MayorNumero.obt_mayorNumero(new int[] {7}));

}

public void testTodosNegativos() {

assertEquals(-4, MayorNumero.obt_mayorNumero(new int[] {-4, -6, -7, 22}));

}

} // Fin de la clase

Febrero 2004

JUNIT. Pruebas Unitarias

9

Ejemplo Procedimiento Prueba con JUNIT (6)

• Ejecutamos las pruebas:

Febrero 2004

JUNIT. Pruebas Unitarias

10

5

Ejemplo Procedimiento Prueba con JUNIT (7)

• Ejecutamos las pruebas:

Febrero 2004

JUNIT. Pruebas Unitarias

11

Ejemplo Procedimiento Prueba con JUNIT (8)

• ¿Qué está mal?:

PREGUNTAR A ALUMNOS

/**
* Devuelve el elemento de mayor valor de una lista
*
* @param list Un array de enteros
* @return
*/
public static int obt_mayorNumero(int lista[]) {

El entero de mayor valor de la lista

int indice, max = Integer.MAX_VALUE;
for (indice = 0; indice < lista.length-1; indice++) {

if (lista[indice] > max) {

max = lista[indice];

}

}
return max;

}

Febrero 2004

JUNIT. Pruebas Unitarias

12

6

Ejemplo Procedimiento Prueba con JUNIT (9)

• ¿Qué está mal?:

Integer.MIN_VALUE

/**
* Devuelve el elemento de mayor valor de una lista
*
* @param list Un array de enteros
* @return
*/
public static int obt_mayorNumero(int lista[]) {

El entero de mayor valor de la lista

int indice, max = Integer.MAX_VALUE;
for (indice = 0; indice < lista.length-1; indice++) {

if (lista[indice] > max) {

max = lista[indice];

}

}
return max;

}

Febrero 2004

JUNIT. Pruebas Unitarias

13

Ejemplo Procedimiento Prueba con JUNIT (10)

• Volvemos a ejecutar las pruebas (hasta que pasen todas):

Febrero 2004

JUNIT. Pruebas Unitarias

14

7

Ejemplo Procedimiento Prueba con JUNIT (11)

• ¿Qué está mal?:

public void testOrden() {

Falla en este “assert”, devuelve el 8 y no el 9

assertEquals(9, MayorNumero.obt_mayorNumero(new int[] {9, 7, 8}));
assertEquals(9, MayorNumero.obt_mayorNumero(new int[] {7, 9, 8}));
assertEquals(9, MayorNumero.obt_mayorNumero(new int[] {7, 8, 9}));

}

public static int obt_mayorNumero(int lista[]) {

int indice, max = Integer.MAX_VALUE;
for (indice = 0; indice < lista.length-1; indice++) {

if (lista[indice] > max) {

max = lista[indice];

}

}
return max;

}

PREGUNTAR A ALUMNOS
ejemplo de que siempre hay
que analizar los extremos

Febrero 2004

JUNIT. Pruebas Unitarias

15

Ejemplo Procedimiento Prueba con JUNIT (12)

• ¿Qué está mal?:

public void testOrden() {

Falla en este “assert”, devuelve el 8 y no el 9

assertEquals(9, MayorNumero.obt_mayorNumero(new int[] {9, 7, 8}));
assertEquals(9, MayorNumero.obt_mayorNumero(new int[] {7, 9, 8}));
assertEquals(9, MayorNumero.obt_mayorNumero(new int[] {7, 8, 9}));

}

lista.length

public static int obt_mayorNumero(int lista[]) {

int indice, max = Integer.MAX_VALUE;
for (indice = 0; indice < lista.length-1; indice++) {

if (lista[indice] > max) {

max = lista[indice];

}

}
return max;

}

Febrero 2004

JUNIT. Pruebas Unitarias

16

8

Ejemplo Procedimiento Prueba con JUNIT (13)

• Otra vez a ejecutar las pruebas (ahora ya pasan todas, podemos seguir):

Febrero 2004

JUNIT. Pruebas Unitarias

17

Ventajas de Probar Progresivamente

• Este método puede parecer extremo (casi es Extreme Programming),

pero normalmente ahorra tiempo y esfuerzo:

Si pruebas mientras desarrollas

Si desarrollas todo y al final pruebas

• Lo mejor es un término medio: cada funcionalidad significativa que

desarrolles pruébala antes de seguir.

Febrero 2004

JUNIT. Pruebas Unitarias

18

9

Pruebas con JUNIT: Explicación Formal (1)

Marco para desarrollar pruebas unitarias (1)

línea 1
-
línea 3
-
-
-
-
-
-
línea 10
-
-
-
-
línea 15
-
-
-

import junit.framework.*;

public class Pruebas extends TestCase {

// variables_privadas

public Pruebas ( ) {

// inicialización

}

public void testXXX ( ) {

// código para verificar que el método a probar funciona correctamente
}

public static void main (String[ ] args) {

junit.textui.TestRunner.run(Pruebas.class); // ejecución consola texto
// junit.swingui.TestRunner.run(Pruebas.class); // ejecución ventana

}

} // fin de clase

Febrero 2004

JUNIT. Pruebas Unitarias

19

Pruebas con JUNIT: Explicación Formal (2)

Marco para desarrollar pruebas unitarias (2):
a)
b)

(línea 1). Importar las clases de JUNIT necesarias.
(línea 3). Toda clase que contenga pruebas ha de heredar de la clase
“TestCase”. Ésta contiene la mayoría de funcionalidad necesaria para
realizar pruebas, incluyendo los “assert”.
(línea 10). Todo método que empiece por “test” en la clase será
ejecutado automáticamente por JUNIT. Así han de empezar todos
los métodos con casos de prueba.

c)

Otros detalles:
a) Cada método que sólo trate un caso o aspecto a probar.
b)

(línea 15). Si no usas BlueJ puedes ejecutar las pruebas por consola.

Febrero 2004

JUNIT. Pruebas Unitarias

20

10

Pruebas con JUNIT: Explicación Formal (3)

Métodos de comprobación (1):
assertEquals (valor_esperado, valor_real)



Comprueba si “valor_esperado” y “valor_real” son iguales.
“valor_real” es la salida que genera el mét
  • Links de descarga
http://lwp-l.com/pdf18191

Comentarios de: JUNIT. Pruebas Unitarias (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad