SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
TemariodecursoJavaSE©IñakiMartín

23.- JUnit 1
TEMARIO DE CURSO
PROGRAMACIÓN JAVA SE
CAPÍTULO 23
JUNIT (introducción)
© Iñaki Martín
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
TemariodecursoJavaSE©IñakiMartín

23.- JUnit 2
๏ JUnit es un paquete Java utilizado para automatizar los procesos de prueba. Mediante la creación de Tests, JUnit
permite realizar pruebas en un código desarrollado en Java
๏ Normalmente las pruebas se realizan por parte del programador, al menos en una fase inicial. Posteriormente, pueden
existir quipos de calidad de software que realicen las pruebas en coordinación con el equipo de desarrollo
๏ Existen varias razones para utilizar JUnit a la hora de hacer pruebas de código:
✓ La herramienta no tiene coste alguno, podremos descargarla directamente desde la Web oficial. Algunas
herramientas como Eclipse, traen ya incluso JUnit instalado por defecto
✓ Es una herramienta muy utilizada, por lo que no será complicado buscar documentación. Existen varios plugins
para poder utilizar con diferentes Entornos de Desarrollo Integrado(IDE).
✓ Existen también muchas herramientas de pruebas de cobertura que utilizaran como base JUnit.
✓ Los tests JUnit se pueden organizar en suites, las que contendrán ejemplares de tests, incluso podrán contener
otras suites.
✓ Los tests realizados se podrán presentar junto con el código, para validar el trabajo realizado.
Que es JUnit
Que es JUnit
JUnit tiene varias versiones, con ligeros cambios en la sintaxis de algunos de sus
métodos. Nosotros usaremos la version 5, también llamada Jupiter
Puesto que Eclipse lleva integrado JUnit, los ejemplos de este curso se realizan
en dicha plataforma. Si se desea usar alguna otra, hay que tener en cuenta que
han de descargase las librerías correspondientes e integrarlas en el proyecto
TemariodecursoJavaSE©IñakiMartín

23.- JUnit 3Elementos de JUnit
Elementos de JUnit
๏ JUnit opera a través de la creación de diversas unidades de prueba (Test Units), que no son mas que métodos que
van a probar distintas funcionalidades de nuestra aplicación.
๏ Normalmente los Test Units se crean conjuntos en una Clase de Pruebas llamada Test Case. Posteriormente, pueden
incluso juntarse varias Clases de Pruebas en una Suite de Pruebas (Test Suite)
๏ Para nuestros ejemplos, vamos a hacer pruebas sobre un desarrollo que damos por creado, que consiste en dos
clases: una clase Persona con un par de atributos, y una clase GestionPersonas que tiene un array de Persona y
varias métodos (que son lo que vamos a probar en nuestros tests):
class Persona {
private String nombre;
private int edad;
public Persona(String nombre, int edad) {
super();
this.nombre = nombre;
this.edad = edad;
}
@Override
public boolean equals(Object obj) {
Persona other = (Persona) obj;
if (edad != other.edad) return false;
if (!nombre.equals(other.nombre)) return false;
return true;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
}
public class GestionPersonas {
Persona[] arrPersonas;
public void crearArray() {
arrPersonas = new Persona[3];
arrPersonas[0] = new Persona("Pepe", 23);
arrPersonas[1] = new Persona("Ana", 11);
arrPersonas[2] = new Persona("Luis", 59);
}
public int mayorEdad() {
int mayor = arrPersonas[0].getEdad();
for (Persona p : arrPersonas) {
if (p.getEdad() > mayor) {
mayor = p.getEdad();
}
}
return mayor;
}
public Persona quienMayorEdad() {
int mayor = arrPersonas[0].getEdad();
Persona pmayor = arrPersonas[0];
for (Persona p : arrPersonas) {
if (p.getEdad() > mayor) {
mayor = p.getEdad();
pmayor = p;
}
}
return pmayor;
}
}
CUIDADO:
Si nuestras futuras
pruebas en JUnit
contemplan comparar
objetos (si son iguales
uno a otro), estos han
de tener sobrescrito su
propio método equals()
Si además han de
compararse por orden
(un elemento mayor o
menor que otro) deben
tener sobrescrito el
método compareTo()
TemariodecursoJavaSE©IñakiMartín

23.- JUnit 4Test Case y Test Units
Crear Test Case y Test Units
๏ Comenzamos por crear unos Test Units sencillos.
๏ Para ello se crea un Test Case, que es simplemente una clase normal, a la que se añaden diferentes métodos, cada
uno de los cuales es un Test Unit. Veamos un ejemplo y que significa cada uno de sus componentes:
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class TestMainPersona {
@Test
public void testMayorEdad() {
GestionPersonas m = new GestionPersonas();
m.crearArray();
int mayorReal = m.mayorEdad();
int mayorEsperado = 87;
assertEquals(mayorReal, mayorEsperado);
}
@Test
public void testQuienMayorEdad() {
GestionPersonas m = new GestionPersonas();
m.crearArray();
Persona personaMayor = m.quienMayorEdad();
// Persona personaMayorEsperada = m.arrPersonas[3];
Persona personaMayorEsperada = new Persona("Luis", 59);
assertEquals(personaMayor, personaMayorEsperada);
}
}
Creamos el Test Case, que es la clase
TestMainPersona. La clase es una clase normal
(en versiones previas de JUnit debía heredar de
TestCase, ya no al usar anotaciones)
Esta anotación indica que el método que va
a continuación es una prueba. Se pueden
incluir varios métodos que hagan varias
pruebas seguidas
Dentro del método he de obtener valores de
nuestro programa y poder comprobar si son
los esperados. En nuestro caso ejecutamos
el método que nos dice cual es la edad
mayor existente
Este es el elemento más importante.
assertEquals(a,b) comprueba que a y b sean
iguales, y si no lo son, nuestro test dará error.
Hay otros métodos para hacer comprobaciones
diferentes, que se ven en páginas siguientes.
Este text debe dar error, pues la persona con
mayor edad no tiene 87, sino 59 años……
Este es otro ejemplo de otra Test Unit, en
este caso, se comprueba que el método
quienMayorDeEdad() devuelve realmente a
la persona de mayor edad…
Este test no debe dar error…
TemariodecursoJavaSE©IñakiMartín

23.- JUnit 5Ejecución de pruebas de los Test Units
Ejecución de la pruebas
๏ Para ejecutar las pruebas, basta con ejecutar normalmente la clase TestMainPersona que acabamos de crear
๏ Se abre una ventana en Eclipse para JUnit que nos informa de los resultados de las pruebas:
Esta es la ventana que
muestra los resultados
Esto indica si se ha producido algún error al construir nuestras
pruebas, (no en el desarrollo que estamos probando)
Esto indica si se ha producido algún error al ejecutar
los test, esto es, si alguna prueba ha dado error
Aquí vemos uno a uno cuales han sido los resultados de los
test efectuados.
Vemos que el uno ha ido bien, marcado con
y que otro no ha ido bien, marcado con
Barra roja indica problemas en las pruebas,
alguna no ha sido satisfactoria.
๏ Si cambiamos la prueba que falla, para que no de fallos, vemos la nueva ejecución:
@Test
public void testMayorEdad() {
GestionPersonas m = new GestionPersonas();
m.crearArray();
int mayorReal = m.mayorEdad();
int mayorEsperado = 59;
assertEquals(mayorReal, mayorEsperado);
}
TemariodecursoJavaSE©IñakiMartín

23.- JUnit 6Métodos de pruebas
Métodos de pruebas
๏ En el ejemplo anterior vimos como se usaba el método assertEquals(), para comprobar que dos elementos habían de
tener el mismo valor.
๏ No es el único método que puede usarse en pruebas, aquí mostramos algunos de los más interesantes:
DEVUELVE METODOS DESCRIPCION
void assertEquals ( val1, val2 )
Método que se verifica que los dos valores, val1 y val2, son idénticos.
Nota: Con arrays se verifica la referencia, no el contenido de éstos.
void assertTrue ( condicion1 ) Método que se verifica que condicion1 sea true
void assertFalse ( condicion1 ) Método que se verifica que condicion1 sea true
void assertNull( val1 ) Método que se verifica que val1 sea null. Si no es null, da error
void assertNotNull ( val1) Método que se verifica que val1 no sea null. Si es null, da error
void fail ( mensaje )
Método que se provoca un error, se debe incluir dentro de nuestras pruebas como una salido
directa de error, sin tener que comprobar solamente lo que nos ofrecen el resto de métodos.
El mensaje que se indica, que es opcional, se ve en la ejecución de la prueba ,cuando falla.
TemariodecursoJavaSE©IñakiMartín

23.- JUnit 7Test Fixtures
Tests Fixtures
๏ Los Test Fixtures son unos nuevos métodos que podemos añadir a nuestra clase de pruebas, que se ejecutan a la vez
que nuestros métodos de pruebas, y pueden ayudarnos a mejorar éstas. Estos nuevos métodos se identifican con unas
nuevas anotaciones, veamos cuales son:
@BeforeAll - el método que marca esta anotación se ejecutará al principio, antes de todas las pruebas @Test
@AfterAll - el método que marca esta anotación se ejecutará al final, tras todas las pruebas @Test
@BeforeEach - el método que marca esta anotación se ejecutará antes de cada una de las pruebas @Test
@AfterEach - el método que marca esta anotación se ejecutará tras cada una de las pruebas @Test
๏ Estas anotaciones marcan nuevos métodos, pero… ¿ qué nombres han de tener esos nuevos métodos ?
๏ Pues pueden tener el nombre que nosotros queramos, aunque existen “estándares” de hecho para que todo el mundo los
llame igual (como los guetterts y setters), pero que realmente, no es obligatorio. Los nombres habituales son:
@BeforeAll
// cuidado, éste ha de ser static
public static void setUpBeforeClass(){
……
}
@AfterAll
// cuidado, éste ha de ser static
public static void tearDowAfterClass(){
……
}
@BeforeEach
public void setUp(){
……
}
@AfterEach
public void tearDown(){
……
}
TemariodecursoJavaSE©IñakiMartín

23.- JUnit 8
๏ Vamos a cambiar nuestra aplicación para usar los Fixtures
๏ En nuestro ejemplo, vemos que cada vez que ser hacia una prueba había que llamar a crear la clase GestionPersonas, y
eso es algo que podríamos hacer tan solo una vez, así que lo añadimos en el método setUpBeforeClass(), que es el
marcado con @BeforeAll
public class TestMainPersona2 {
static GestionPersonas m;
@BeforeAll
public static void setUpBeforeClass() {
m = new GestionPersonas();
}
El objeto lo creamos dentro de setUpBeforeClass(),
pero claro, si deseamos usarlo en todos los otros
métodos @Test, hemos de declararlo como atributo
de la clase
Y como el método setUpBeforeClass() es static, el
atributo ha de ser también static….
๏ Asimismo, puede que antes de cada prueba me haya de asegurar que el array de personas esta correctamente creado,
por que por ejemplo, en alguna prueba lo haya modificado, así que vamos a a hacer es crear el array en el método
setUp(), que es el marcado con @BeforeEach, para que se realice antes de cada uno de los métodos @Test:
@BeforeEach
public void setUp() {
m.crearArray();
}
๏ Finalmente, vamos a crear nuevas pruebas, una por ejemplo, que nos modifique el array y así, veamos que las
pruebas funcionan bien por la inclusión del fixture @BeforeEach. El código completo esta en la página siguiente:
Test Fixtures
TemariodecursoJavaSE©IñakiMartín

23.- JUnit 9
public class TestMainPersona2 {
static GestionPersonas m;
// TEST FIXTURES ---------------------------------------
@BeforeAll
public static void setUpBeforeClass() {
m = new GestionPersonas();
}
@BeforeEach
public void setUp() {
m.crearArray();
}
// TEST UNITS ———————————————————
// ——- comprueba que ningún elemento del array es null
@Test
public void testNigunElementoEsNull() {
for (Persona p : m.arrPersonas) {
if (p == null) {
fail("ERROR: UNA PERSONA ES NULL !!!");
}
}
}
@Test
public void testQuienMayorEdad() {
m.arrPersonas[0].setEdad(10000);
Persona personaMayorCalculada = m.quienMayorEdad();
Persona personaMayorEsperada = m.arrPersonas[2];
assertEquals(personaMayorCalculada, personaMayorEsperada);
}
@Test
public void testMayorEdad() {
int mayorReal = m.mayorEdad();
int mayorEsperado = 89;
assertEquals(mayorReal, mayorEsperado);
}
// ——- // comprueba que el array no es null
@Test
public void testExisteArray() {
assertNotNull(m.arrPersonas);
}
}
No se incluyen @AfterEach ni @AfterAll , pues no se usan, pero se codificarían igual que los @BeforeXxx correspondientes
En este método vemos el uso de fail() Cuando se produce
cierta condición de error que deseamos controlar, (en este
caso, que hay un elemento null en el array), hacemos una
llamada al método fail()
Si por alguna razón alguno de los elementos del array fuera
null, en las pruebas saldría algo como esto, que indica, al
pincha en el test que da error, en una ventana nueva llamada
FailureTrace, que error se ha dado (ver que aparece el texto
“ERROR: ES UNA PERSONA NULL)
En este método hemos modificado el array, cambiando la edad a
una de las personas. No es un ejemplo que sea de mucha utilidad,
pero sirve para ver que los siguientes test siguen funcionando,
pues el array se crea siempre antes de cada prueba, al hacerlo en
el método marcado con @BeforeEach
Se ejecuta antes de
todos los tests, y
vale para inicializar
elementos, como en
nuestro caso, crear
el objeto de la clase
GestionPersonas
Se ejecuta antes de
ejecutar cada uno de
los tests, y vale para
asegurar que los
tests empiezan
siempre con las
condiciones
deseadas, como en
nuestro caso, que
creamos siempre el
array de personas
para que sea
siempre “nuevo”
Test Fixtures
TemariodecursoJavaSE©IñakiMartín

23.- JUnit 10
๏ Como ya se dijo, los Test Units se crean conjuntos en una Clase de Pruebas llamada Test Case. Y posteriormente,
pueden incluso juntarse varias Clases de Pruebas en una Suite de Pruebas (Test Suite)
๏ Una Test Suite es una clase simple, cuyo contenido puede quedar vacio por ahora, que marca dos nuevas anotaciones.
Y que solo exige que indiquemos las clases que contienen nuestros Test Case en una de ellas :
Test Fixtures
JUnit Suite
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({ TestMainPersona.class, TestMainPersona2.class })
public class SuiteDeTodosLosTest {
}
Aquí se indican , separados por comas, los .class de las clases de test
que hemos creado anteriormente
Las dos anotaciones nuevas se incluyen tal y como se muestran en
este ejemplo
๏ También se puede invocar a que se realicen todas las pruebas de todos los Case existentes en un package, o en un
proyecto, haciendo click el package o el proyecto, y ejecutando Run -> Run as -> JUnit Test
TemariodecursoJavaSE©IñakiMartín

23.- JUnit 11
๏ Puede que en un momento dado, en un plan de pruebas con muchos Test Units o Test Case, no deseemos que alguna
de ellas se realice momentáneamente. No es necesario que se comente o borre dicho Unit o Case, podemos usar la
anotación @Ignore
public class TestMainPersona2 {
@Ignore
@Test
public void testExisteArray() {
assertNotNull(m.arrPersonas);
}
Test Fixtures
@Ignore
@Ignore
public class TestMainPersona2 {
@Test
public void testExisteArray() {
assertNotNull(m.arrPersonas);
}

Más contenido relacionado

La actualidad más candente

Gestión de errores en Java
Gestión de errores en JavaGestión de errores en Java
Gestión de errores en Javaeccutpl
 
Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en javajent46
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVAinnovalabcun
 
Ingenieria de sw Junit
Ingenieria de sw JunitIngenieria de sw Junit
Ingenieria de sw Junitpattyand89
 
Java exceptions
Java exceptionsJava exceptions
Java exceptionssandropaul
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013dayaorte
 
Semana 8 excepciones definidas por el usuario
Semana 8 excepciones definidas por el usuarioSemana 8 excepciones definidas por el usuario
Semana 8 excepciones definidas por el usuariovictdiazm
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en JavaJohn Ortiz
 
Programación java1
Programación java1Programación java1
Programación java1jbersosa
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de controlElena Perz
 
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNTEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNAnyeni Garay
 
Programación III (Java) - 04 Excepciones
Programación III (Java) - 04 ExcepcionesProgramación III (Java) - 04 Excepciones
Programación III (Java) - 04 ExcepcionesAndoni Eguíluz Morán
 
Java excepciones
Java excepcionesJava excepciones
Java excepcionesricardo_79
 
Metodologia para resolver problemas con Programacion orientada a Objetos
Metodologia para resolver problemas con Programacion orientada a ObjetosMetodologia para resolver problemas con Programacion orientada a Objetos
Metodologia para resolver problemas con Programacion orientada a ObjetosWilliam Diaz S
 
Exceptions (2)
Exceptions (2)Exceptions (2)
Exceptions (2)jbersosa
 

La actualidad más candente (20)

5.manejo de excepciones
5.manejo de excepciones5.manejo de excepciones
5.manejo de excepciones
 
Gestión de errores en Java
Gestión de errores en JavaGestión de errores en Java
Gestión de errores en Java
 
Manejo De Excepciones
Manejo De ExcepcionesManejo De Excepciones
Manejo De Excepciones
 
Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en java
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
 
Ingenieria de sw Junit
Ingenieria de sw JunitIngenieria de sw Junit
Ingenieria de sw Junit
 
excepciones en java
excepciones en javaexcepciones en java
excepciones en java
 
Java exceptions
Java exceptionsJava exceptions
Java exceptions
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013
 
Semana 8 excepciones definidas por el usuario
Semana 8 excepciones definidas por el usuarioSemana 8 excepciones definidas por el usuario
Semana 8 excepciones definidas por el usuario
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en Java
 
Programación java1
Programación java1Programación java1
Programación java1
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNTEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
 
Semana 2 Clases y Objetos en Java
Semana 2   Clases y Objetos en JavaSemana 2   Clases y Objetos en Java
Semana 2 Clases y Objetos en Java
 
Programación III (Java) - 04 Excepciones
Programación III (Java) - 04 ExcepcionesProgramación III (Java) - 04 Excepciones
Programación III (Java) - 04 Excepciones
 
Java excepciones
Java excepcionesJava excepciones
Java excepciones
 
Metodologia para resolver problemas con Programacion orientada a Objetos
Metodologia para resolver problemas con Programacion orientada a ObjetosMetodologia para resolver problemas con Programacion orientada a Objetos
Metodologia para resolver problemas con Programacion orientada a Objetos
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
Exceptions (2)
Exceptions (2)Exceptions (2)
Exceptions (2)
 

Similar a JUnit introducción

JUnit - Germán Domínguez
JUnit - Germán DomínguezJUnit - Germán Domínguez
JUnit - Germán Domínguez2008PA2Info3
 
Pruebas software con junit ..
Pruebas software con junit ..Pruebas software con junit ..
Pruebas software con junit ..siticfje
 
JUnit - Pablo Calvache
JUnit - Pablo CalvacheJUnit - Pablo Calvache
JUnit - Pablo Calvache2008PA2Info3
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmockkaolong
 
Tema 9 pruebas unitarias por gio
Tema 9   pruebas unitarias por gioTema 9   pruebas unitarias por gio
Tema 9 pruebas unitarias por gioRobert Wolf
 
Pruebas Automatizadas
Pruebas AutomatizadasPruebas Automatizadas
Pruebas AutomatizadasAngel Nuñez
 
Cesnavarra 2009-boletín 1
Cesnavarra 2009-boletín 1Cesnavarra 2009-boletín 1
Cesnavarra 2009-boletín 1Cein
 
Junit con netbeans
Junit con netbeansJunit con netbeans
Junit con netbeansbachispasaca
 
Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4Paulo Clavijo
 
Pruebas Unitarias1.pdf
Pruebas Unitarias1.pdfPruebas Unitarias1.pdf
Pruebas Unitarias1.pdfSERGIO Ibañez
 
Unit Testing with Mock Objects
Unit Testing with Mock ObjectsUnit Testing with Mock Objects
Unit Testing with Mock ObjectsAngel Nuñez
 
Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Juan Vladimir
 
Test Automation .NET
Test Automation .NETTest Automation .NET
Test Automation .NETAngel Nuñez
 
Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDDFernando Perez
 

Similar a JUnit introducción (20)

JUnit - Germán Domínguez
JUnit - Germán DomínguezJUnit - Germán Domínguez
JUnit - Germán Domínguez
 
Pruebas software con junit ..
Pruebas software con junit ..Pruebas software con junit ..
Pruebas software con junit ..
 
JUnit - Pablo Calvache
JUnit - Pablo CalvacheJUnit - Pablo Calvache
JUnit - Pablo Calvache
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
 
Tema 9 pruebas unitarias por gio
Tema 9   pruebas unitarias por gioTema 9   pruebas unitarias por gio
Tema 9 pruebas unitarias por gio
 
Qunit CookBook español
Qunit CookBook españolQunit CookBook español
Qunit CookBook español
 
Pruebas Automatizadas
Pruebas AutomatizadasPruebas Automatizadas
Pruebas Automatizadas
 
Cesnavarra 2009-boletín 1
Cesnavarra 2009-boletín 1Cesnavarra 2009-boletín 1
Cesnavarra 2009-boletín 1
 
Testeo unitario
Testeo unitarioTesteo unitario
Testeo unitario
 
Junit con netbeans
Junit con netbeansJunit con netbeans
Junit con netbeans
 
Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4
 
Pruebade j unit
Pruebade j unitPruebade j unit
Pruebade j unit
 
Pruebade j unit
Pruebade j unitPruebade j unit
Pruebade j unit
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
 
Pruebas Unitarias1.pdf
Pruebas Unitarias1.pdfPruebas Unitarias1.pdf
Pruebas Unitarias1.pdf
 
Unit Testing with Mock Objects
Unit Testing with Mock ObjectsUnit Testing with Mock Objects
Unit Testing with Mock Objects
 
Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Conceptos básicos de Unit Test
Conceptos básicos de Unit Test
 
Test Automation .NET
Test Automation .NETTest Automation .NET
Test Automation .NET
 
Best Practices
Best PracticesBest Practices
Best Practices
 
Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDD
 

Más de Jyoc X

Jyoc java-cap22 seguridad
Jyoc java-cap22 seguridadJyoc java-cap22 seguridad
Jyoc java-cap22 seguridadJyoc X
 
Jyoc java-cap20 listas, colas y pilas
Jyoc java-cap20 listas, colas y pilasJyoc java-cap20 listas, colas y pilas
Jyoc java-cap20 listas, colas y pilasJyoc X
 
Jyoc java-cap19 tad (tipos abstractos de datos)
Jyoc java-cap19 tad (tipos abstractos de datos)Jyoc java-cap19 tad (tipos abstractos de datos)
Jyoc java-cap19 tad (tipos abstractos de datos)Jyoc X
 
Jyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc X
 
Jyoc java-cap17 persistencia. nio
Jyoc java-cap17 persistencia. nioJyoc java-cap17 persistencia. nio
Jyoc java-cap17 persistencia. nioJyoc X
 
Jyoc java-cap15 persistencia. ficheros xml, j son y pdf
Jyoc java-cap15 persistencia. ficheros xml, j son y pdfJyoc java-cap15 persistencia. ficheros xml, j son y pdf
Jyoc java-cap15 persistencia. ficheros xml, j son y pdfJyoc X
 
Jyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientesJyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientesJyoc X
 
Jyoc java-cap13 recursividad
Jyoc java-cap13 recursividadJyoc java-cap13 recursividad
Jyoc java-cap13 recursividadJyoc X
 
Jyoc java-cap11 colecciones
Jyoc java-cap11 coleccionesJyoc java-cap11 colecciones
Jyoc java-cap11 coleccionesJyoc X
 
Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc X
 
Jyoc java-cap08 principios poo
Jyoc java-cap08 principios pooJyoc java-cap08 principios poo
Jyoc java-cap08 principios pooJyoc X
 
Jyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetosJyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetosJyoc X
 
Jyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc X
 
Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)Jyoc X
 
Jyoc java-cap03 bucles
Jyoc java-cap03 buclesJyoc java-cap03 bucles
Jyoc java-cap03 buclesJyoc X
 
Jyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc X
 

Más de Jyoc X (16)

Jyoc java-cap22 seguridad
Jyoc java-cap22 seguridadJyoc java-cap22 seguridad
Jyoc java-cap22 seguridad
 
Jyoc java-cap20 listas, colas y pilas
Jyoc java-cap20 listas, colas y pilasJyoc java-cap20 listas, colas y pilas
Jyoc java-cap20 listas, colas y pilas
 
Jyoc java-cap19 tad (tipos abstractos de datos)
Jyoc java-cap19 tad (tipos abstractos de datos)Jyoc java-cap19 tad (tipos abstractos de datos)
Jyoc java-cap19 tad (tipos abstractos de datos)
 
Jyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fx
 
Jyoc java-cap17 persistencia. nio
Jyoc java-cap17 persistencia. nioJyoc java-cap17 persistencia. nio
Jyoc java-cap17 persistencia. nio
 
Jyoc java-cap15 persistencia. ficheros xml, j son y pdf
Jyoc java-cap15 persistencia. ficheros xml, j son y pdfJyoc java-cap15 persistencia. ficheros xml, j son y pdf
Jyoc java-cap15 persistencia. ficheros xml, j son y pdf
 
Jyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientesJyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientes
 
Jyoc java-cap13 recursividad
Jyoc java-cap13 recursividadJyoc java-cap13 recursividad
Jyoc java-cap13 recursividad
 
Jyoc java-cap11 colecciones
Jyoc java-cap11 coleccionesJyoc java-cap11 colecciones
Jyoc java-cap11 colecciones
 
Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumerados
 
Jyoc java-cap08 principios poo
Jyoc java-cap08 principios pooJyoc java-cap08 principios poo
Jyoc java-cap08 principios poo
 
Jyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetosJyoc java-cap07 clases y objetos
Jyoc java-cap07 clases y objetos
 
Jyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc java-cap06 la clase string
Jyoc java-cap06 la clase string
 
Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)
 
Jyoc java-cap03 bucles
Jyoc java-cap03 buclesJyoc java-cap03 bucles
Jyoc java-cap03 bucles
 
Jyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salida
 

Último

SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 

Último (19)

SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 

JUnit introducción

  • 1. TemariodecursoJavaSE©IñakiMartín
 23.- JUnit 1 TEMARIO DE CURSO PROGRAMACIÓN JAVA SE CAPÍTULO 23 JUNIT (introducción) © Iñaki Martín Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
  • 2. TemariodecursoJavaSE©IñakiMartín
 23.- JUnit 2 ๏ JUnit es un paquete Java utilizado para automatizar los procesos de prueba. Mediante la creación de Tests, JUnit permite realizar pruebas en un código desarrollado en Java ๏ Normalmente las pruebas se realizan por parte del programador, al menos en una fase inicial. Posteriormente, pueden existir quipos de calidad de software que realicen las pruebas en coordinación con el equipo de desarrollo ๏ Existen varias razones para utilizar JUnit a la hora de hacer pruebas de código: ✓ La herramienta no tiene coste alguno, podremos descargarla directamente desde la Web oficial. Algunas herramientas como Eclipse, traen ya incluso JUnit instalado por defecto ✓ Es una herramienta muy utilizada, por lo que no será complicado buscar documentación. Existen varios plugins para poder utilizar con diferentes Entornos de Desarrollo Integrado(IDE). ✓ Existen también muchas herramientas de pruebas de cobertura que utilizaran como base JUnit. ✓ Los tests JUnit se pueden organizar en suites, las que contendrán ejemplares de tests, incluso podrán contener otras suites. ✓ Los tests realizados se podrán presentar junto con el código, para validar el trabajo realizado. Que es JUnit Que es JUnit JUnit tiene varias versiones, con ligeros cambios en la sintaxis de algunos de sus métodos. Nosotros usaremos la version 5, también llamada Jupiter Puesto que Eclipse lleva integrado JUnit, los ejemplos de este curso se realizan en dicha plataforma. Si se desea usar alguna otra, hay que tener en cuenta que han de descargase las librerías correspondientes e integrarlas en el proyecto
  • 3. TemariodecursoJavaSE©IñakiMartín
 23.- JUnit 3Elementos de JUnit Elementos de JUnit ๏ JUnit opera a través de la creación de diversas unidades de prueba (Test Units), que no son mas que métodos que van a probar distintas funcionalidades de nuestra aplicación. ๏ Normalmente los Test Units se crean conjuntos en una Clase de Pruebas llamada Test Case. Posteriormente, pueden incluso juntarse varias Clases de Pruebas en una Suite de Pruebas (Test Suite) ๏ Para nuestros ejemplos, vamos a hacer pruebas sobre un desarrollo que damos por creado, que consiste en dos clases: una clase Persona con un par de atributos, y una clase GestionPersonas que tiene un array de Persona y varias métodos (que son lo que vamos a probar en nuestros tests): class Persona { private String nombre; private int edad; public Persona(String nombre, int edad) { super(); this.nombre = nombre; this.edad = edad; } @Override public boolean equals(Object obj) { Persona other = (Persona) obj; if (edad != other.edad) return false; if (!nombre.equals(other.nombre)) return false; return true; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } } public class GestionPersonas { Persona[] arrPersonas; public void crearArray() { arrPersonas = new Persona[3]; arrPersonas[0] = new Persona("Pepe", 23); arrPersonas[1] = new Persona("Ana", 11); arrPersonas[2] = new Persona("Luis", 59); } public int mayorEdad() { int mayor = arrPersonas[0].getEdad(); for (Persona p : arrPersonas) { if (p.getEdad() > mayor) { mayor = p.getEdad(); } } return mayor; } public Persona quienMayorEdad() { int mayor = arrPersonas[0].getEdad(); Persona pmayor = arrPersonas[0]; for (Persona p : arrPersonas) { if (p.getEdad() > mayor) { mayor = p.getEdad(); pmayor = p; } } return pmayor; } } CUIDADO: Si nuestras futuras pruebas en JUnit contemplan comparar objetos (si son iguales uno a otro), estos han de tener sobrescrito su propio método equals() Si además han de compararse por orden (un elemento mayor o menor que otro) deben tener sobrescrito el método compareTo()
  • 4. TemariodecursoJavaSE©IñakiMartín
 23.- JUnit 4Test Case y Test Units Crear Test Case y Test Units ๏ Comenzamos por crear unos Test Units sencillos. ๏ Para ello se crea un Test Case, que es simplemente una clase normal, a la que se añaden diferentes métodos, cada uno de los cuales es un Test Unit. Veamos un ejemplo y que significa cada uno de sus componentes: import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; public class TestMainPersona { @Test public void testMayorEdad() { GestionPersonas m = new GestionPersonas(); m.crearArray(); int mayorReal = m.mayorEdad(); int mayorEsperado = 87; assertEquals(mayorReal, mayorEsperado); } @Test public void testQuienMayorEdad() { GestionPersonas m = new GestionPersonas(); m.crearArray(); Persona personaMayor = m.quienMayorEdad(); // Persona personaMayorEsperada = m.arrPersonas[3]; Persona personaMayorEsperada = new Persona("Luis", 59); assertEquals(personaMayor, personaMayorEsperada); } } Creamos el Test Case, que es la clase TestMainPersona. La clase es una clase normal (en versiones previas de JUnit debía heredar de TestCase, ya no al usar anotaciones) Esta anotación indica que el método que va a continuación es una prueba. Se pueden incluir varios métodos que hagan varias pruebas seguidas Dentro del método he de obtener valores de nuestro programa y poder comprobar si son los esperados. En nuestro caso ejecutamos el método que nos dice cual es la edad mayor existente Este es el elemento más importante. assertEquals(a,b) comprueba que a y b sean iguales, y si no lo son, nuestro test dará error. Hay otros métodos para hacer comprobaciones diferentes, que se ven en páginas siguientes. Este text debe dar error, pues la persona con mayor edad no tiene 87, sino 59 años…… Este es otro ejemplo de otra Test Unit, en este caso, se comprueba que el método quienMayorDeEdad() devuelve realmente a la persona de mayor edad… Este test no debe dar error…
  • 5. TemariodecursoJavaSE©IñakiMartín
 23.- JUnit 5Ejecución de pruebas de los Test Units Ejecución de la pruebas ๏ Para ejecutar las pruebas, basta con ejecutar normalmente la clase TestMainPersona que acabamos de crear ๏ Se abre una ventana en Eclipse para JUnit que nos informa de los resultados de las pruebas: Esta es la ventana que muestra los resultados Esto indica si se ha producido algún error al construir nuestras pruebas, (no en el desarrollo que estamos probando) Esto indica si se ha producido algún error al ejecutar los test, esto es, si alguna prueba ha dado error Aquí vemos uno a uno cuales han sido los resultados de los test efectuados. Vemos que el uno ha ido bien, marcado con y que otro no ha ido bien, marcado con Barra roja indica problemas en las pruebas, alguna no ha sido satisfactoria. ๏ Si cambiamos la prueba que falla, para que no de fallos, vemos la nueva ejecución: @Test public void testMayorEdad() { GestionPersonas m = new GestionPersonas(); m.crearArray(); int mayorReal = m.mayorEdad(); int mayorEsperado = 59; assertEquals(mayorReal, mayorEsperado); }
  • 6. TemariodecursoJavaSE©IñakiMartín
 23.- JUnit 6Métodos de pruebas Métodos de pruebas ๏ En el ejemplo anterior vimos como se usaba el método assertEquals(), para comprobar que dos elementos habían de tener el mismo valor. ๏ No es el único método que puede usarse en pruebas, aquí mostramos algunos de los más interesantes: DEVUELVE METODOS DESCRIPCION void assertEquals ( val1, val2 ) Método que se verifica que los dos valores, val1 y val2, son idénticos. Nota: Con arrays se verifica la referencia, no el contenido de éstos. void assertTrue ( condicion1 ) Método que se verifica que condicion1 sea true void assertFalse ( condicion1 ) Método que se verifica que condicion1 sea true void assertNull( val1 ) Método que se verifica que val1 sea null. Si no es null, da error void assertNotNull ( val1) Método que se verifica que val1 no sea null. Si es null, da error void fail ( mensaje ) Método que se provoca un error, se debe incluir dentro de nuestras pruebas como una salido directa de error, sin tener que comprobar solamente lo que nos ofrecen el resto de métodos. El mensaje que se indica, que es opcional, se ve en la ejecución de la prueba ,cuando falla.
  • 7. TemariodecursoJavaSE©IñakiMartín
 23.- JUnit 7Test Fixtures Tests Fixtures ๏ Los Test Fixtures son unos nuevos métodos que podemos añadir a nuestra clase de pruebas, que se ejecutan a la vez que nuestros métodos de pruebas, y pueden ayudarnos a mejorar éstas. Estos nuevos métodos se identifican con unas nuevas anotaciones, veamos cuales son: @BeforeAll - el método que marca esta anotación se ejecutará al principio, antes de todas las pruebas @Test @AfterAll - el método que marca esta anotación se ejecutará al final, tras todas las pruebas @Test @BeforeEach - el método que marca esta anotación se ejecutará antes de cada una de las pruebas @Test @AfterEach - el método que marca esta anotación se ejecutará tras cada una de las pruebas @Test ๏ Estas anotaciones marcan nuevos métodos, pero… ¿ qué nombres han de tener esos nuevos métodos ? ๏ Pues pueden tener el nombre que nosotros queramos, aunque existen “estándares” de hecho para que todo el mundo los llame igual (como los guetterts y setters), pero que realmente, no es obligatorio. Los nombres habituales son: @BeforeAll // cuidado, éste ha de ser static public static void setUpBeforeClass(){ …… } @AfterAll // cuidado, éste ha de ser static public static void tearDowAfterClass(){ …… } @BeforeEach public void setUp(){ …… } @AfterEach public void tearDown(){ …… }
  • 8. TemariodecursoJavaSE©IñakiMartín
 23.- JUnit 8 ๏ Vamos a cambiar nuestra aplicación para usar los Fixtures ๏ En nuestro ejemplo, vemos que cada vez que ser hacia una prueba había que llamar a crear la clase GestionPersonas, y eso es algo que podríamos hacer tan solo una vez, así que lo añadimos en el método setUpBeforeClass(), que es el marcado con @BeforeAll public class TestMainPersona2 { static GestionPersonas m; @BeforeAll public static void setUpBeforeClass() { m = new GestionPersonas(); } El objeto lo creamos dentro de setUpBeforeClass(), pero claro, si deseamos usarlo en todos los otros métodos @Test, hemos de declararlo como atributo de la clase Y como el método setUpBeforeClass() es static, el atributo ha de ser también static…. ๏ Asimismo, puede que antes de cada prueba me haya de asegurar que el array de personas esta correctamente creado, por que por ejemplo, en alguna prueba lo haya modificado, así que vamos a a hacer es crear el array en el método setUp(), que es el marcado con @BeforeEach, para que se realice antes de cada uno de los métodos @Test: @BeforeEach public void setUp() { m.crearArray(); } ๏ Finalmente, vamos a crear nuevas pruebas, una por ejemplo, que nos modifique el array y así, veamos que las pruebas funcionan bien por la inclusión del fixture @BeforeEach. El código completo esta en la página siguiente: Test Fixtures
  • 9. TemariodecursoJavaSE©IñakiMartín
 23.- JUnit 9 public class TestMainPersona2 { static GestionPersonas m; // TEST FIXTURES --------------------------------------- @BeforeAll public static void setUpBeforeClass() { m = new GestionPersonas(); } @BeforeEach public void setUp() { m.crearArray(); } // TEST UNITS ——————————————————— // ——- comprueba que ningún elemento del array es null @Test public void testNigunElementoEsNull() { for (Persona p : m.arrPersonas) { if (p == null) { fail("ERROR: UNA PERSONA ES NULL !!!"); } } } @Test public void testQuienMayorEdad() { m.arrPersonas[0].setEdad(10000); Persona personaMayorCalculada = m.quienMayorEdad(); Persona personaMayorEsperada = m.arrPersonas[2]; assertEquals(personaMayorCalculada, personaMayorEsperada); } @Test public void testMayorEdad() { int mayorReal = m.mayorEdad(); int mayorEsperado = 89; assertEquals(mayorReal, mayorEsperado); } // ——- // comprueba que el array no es null @Test public void testExisteArray() { assertNotNull(m.arrPersonas); } } No se incluyen @AfterEach ni @AfterAll , pues no se usan, pero se codificarían igual que los @BeforeXxx correspondientes En este método vemos el uso de fail() Cuando se produce cierta condición de error que deseamos controlar, (en este caso, que hay un elemento null en el array), hacemos una llamada al método fail() Si por alguna razón alguno de los elementos del array fuera null, en las pruebas saldría algo como esto, que indica, al pincha en el test que da error, en una ventana nueva llamada FailureTrace, que error se ha dado (ver que aparece el texto “ERROR: ES UNA PERSONA NULL) En este método hemos modificado el array, cambiando la edad a una de las personas. No es un ejemplo que sea de mucha utilidad, pero sirve para ver que los siguientes test siguen funcionando, pues el array se crea siempre antes de cada prueba, al hacerlo en el método marcado con @BeforeEach Se ejecuta antes de todos los tests, y vale para inicializar elementos, como en nuestro caso, crear el objeto de la clase GestionPersonas Se ejecuta antes de ejecutar cada uno de los tests, y vale para asegurar que los tests empiezan siempre con las condiciones deseadas, como en nuestro caso, que creamos siempre el array de personas para que sea siempre “nuevo” Test Fixtures
  • 10. TemariodecursoJavaSE©IñakiMartín
 23.- JUnit 10 ๏ Como ya se dijo, los Test Units se crean conjuntos en una Clase de Pruebas llamada Test Case. Y posteriormente, pueden incluso juntarse varias Clases de Pruebas en una Suite de Pruebas (Test Suite) ๏ Una Test Suite es una clase simple, cuyo contenido puede quedar vacio por ahora, que marca dos nuevas anotaciones. Y que solo exige que indiquemos las clases que contienen nuestros Test Case en una de ellas : Test Fixtures JUnit Suite import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ TestMainPersona.class, TestMainPersona2.class }) public class SuiteDeTodosLosTest { } Aquí se indican , separados por comas, los .class de las clases de test que hemos creado anteriormente Las dos anotaciones nuevas se incluyen tal y como se muestran en este ejemplo ๏ También se puede invocar a que se realicen todas las pruebas de todos los Case existentes en un package, o en un proyecto, haciendo click el package o el proyecto, y ejecutando Run -> Run as -> JUnit Test
  • 11. TemariodecursoJavaSE©IñakiMartín
 23.- JUnit 11 ๏ Puede que en un momento dado, en un plan de pruebas con muchos Test Units o Test Case, no deseemos que alguna de ellas se realice momentáneamente. No es necesario que se comente o borre dicho Unit o Case, podemos usar la anotación @Ignore public class TestMainPersona2 { @Ignore @Test public void testExisteArray() { assertNotNull(m.arrPersonas); } Test Fixtures @Ignore @Ignore public class TestMainPersona2 { @Test public void testExisteArray() { assertNotNull(m.arrPersonas); }