Title | DPJ MÓdulo 3 Capítulo 3 - Ejercicios - JUnit, Implementando Unidades de Prueba |
---|---|
Course | Diplomatura En Programacion Java |
Institution | Universidad Tecnológica Nacional |
Pages | 36 |
File Size | 2.6 MB |
File Type | |
Total Downloads | 86 |
Total Views | 120 |
Ejercicios - JUnit, Implementando Unidades de Prueba...
Unidad 1 JUnit, Implementando Unidades de Prueba Capítulo 3 - Ejercicios Desarrollo en Java Diplomatura en Programación en Java U.T.N. Lic. Marcelo Samia
Este documento fue desarrollado para comprender e implementar las pruebas unitarias, los conjuntos de pruebas y su implementación en casos reales de desarrollo
JUnit, Implementando Unidades de Prueba
Capítulo 3—JUnit, Implementando Unidades de Prueba Ejercicio 1 – Comprendiendo las pruebas unitarias Tarea 1 – Creación de la primera unidad de prueba Completar los siguientes pasos: 1. Abrir el espacio de trabajo que se encuentra en “DIR_DE_ARCHIVOS_DEL_CURSO\Ejercicios\Capítulo3\JUnit\Ejercicio1\workspace” 2. Crear un nuevo proyecto de tipo Java y nombrarlo Test como muestran las figuras 1 y 2
Figura 1
Lic. Marcelo Samia
1
JUnit, Implementando Unidades de Prueba
Figura 2
3. Seleccionar “Allow output folders …” para que los archivos compilados estén en otro directorio, en el Tests\bin
Figura 3
Lic. Marcelo Samia
2
JUnit, Implementando Unidades de Prueba Una vez creado el proyecto, el explorador de paquetes debería verse como se muestra en la figura 4
Figura 4
4. Configurar el proyecto para que gane visibilidad en los otros que componen el espacio de trabajo. Para ello, el entorno debe modificar la variable CLASSPATH interna del proyecto para que acceda a las clases de los otros proyectos. Esto se consigue configurando el camino de construcción o “Build Path” como se muestra en la figura 5
Figura 5
5. En la ventana “Properties for Tests”, seleccionar la pestaña “Projects”. La ventana tiene que verse como se muestra en la figura 6. A continuación, en la sección “Required projects on the build path:” presionar el botón “Add”
Lic. Marcelo Samia
3
JUnit, Implementando Unidades de Prueba
Figura 6
6. En la ventana “Required Project Selection”, seleccionar ambos proyectos como muestra la figura 7 y presionar el botón “OK”
Figura 7
Cuando se cierra la ventana, “Properties for Tests” se debería ver como muestra la figura 8
Lic. Marcelo Samia
4
JUnit, Implementando Unidades de Prueba
Figura 8
7. Generar una nueva prueba unitaria. Para ello, presionar el botón derecho del mouse y en el menú desplegable que aparece seleccionar NewJunit Test Case como muestra la figura 9
Figura 9
8. Se despliega una ventana similar a la de creación de clases. Notar que por defecto aparece seleccionado “New JUnit 4 test” por defecto. Esta es la versión que se va a utilizar del
Lic. Marcelo Samia
5
JUnit, Implementando Unidades de Prueba “Framework” para crear la prueba unitaria. Nombrar “UtilidadesDeCadenaTest” a la prueba unitaria. Seleccionar los cuadros de verificación para que se creen los métodos setup() y tearDown() automáticamente. La configuración final debe verse como muestra la figura 10. No presionar el botón “Finish” aún.
Figura 10
9. En la sección “Class under test:”, presionar el botón “Browse” para que se despliegue la ventana que muestra la figura 11. En el cuadro de texto debajo del título “Test stubs will be generated for the class:” escribir UtilidadesDeCadena y debe aparecer al hacer esto en la sección “Matching ítems” la o las clases que coinciden con el nombre escrito. En este caso sólo hay una con dicho nombre, pero en caso de haber más de una en diferentes paquetes, se debe seleccionar la apropiada haciendo doble clic sobre el nombre correcto o seleccionándolo y presionando el botón “OK”. Realizar la mencionada selección.
Lic. Marcelo Samia
6
JUnit, Implementando Unidades de Prueba
Figura 11
La ventana “New JUnit Test Case” se debe ver como muestra la figura 12 10. Notar que se habilita el botón “Next”. Presionarlo
Figura 12
11. Se despliega la siguiente ventana con los métodos que son visibles y factible de pruebas para poderlos seleccionar y que se generen automáticamente sus firmas de test con un bloque de sentencias asociado en blanco en el cual se puedan colocar las instrucciones.
Lic. Marcelo Samia
7
JUnit, Implementando Unidades de Prueba
Figura 13
Seleccionar los métodos que son de interés para que se generen sus firmas de test correspondientes (en este caso, todos los de la clase UtilidadesDeCadena, como muestra la figura 14). Notar que al poder acceder a todos los métodos que son visibles según como estén definidos los modificadores de visibilidad de los mismos, se incluyen también los que estén al alcance a lo largo de la cadena de herencia.
Figura 14
12. Presionar el botón “Finish” 13. Como no se agregó el archivo de librería que contiene las clases del marco de trabajo (Framework) de JUnit, se despliega una ventana en la cual el entorno propone agregar la mencionada librería como muestra la figura 15. Si se hubiese agregado previamente dicha librería, esta ventana no aparecería. Notar que la librería propuesta corresponde a la
Lic. Marcelo Samia
8
JUnit, Implementando Unidades de Prueba versión 4 del “Framework” como se especificó en el momento de creación de la prueba unitaria. Presionar "OK".
Figura 15
La librería está contenida en un archivo comprimido con las clases que la componen cuya extensión es “.jar”, como se muestra en la Figura 16. Este tipo de archivos se puede crear con una aplicación para tal fin que se encuentra disponible en el directorio “\bin” de la instalación del JDK.
Figura 16
El editor de texto debe mostrar la prueba unitaria y los métodos generados automáticamente como muestra la figura 17. Notar que al generar los mencionados métodos se agregaron automáticamente, anteponiendo la palabra “test”, todos aquellos que eran visibles en la clase objetivo al momento de la generación que fueron seleccionados.
Lic. Marcelo Samia
9
JUnit, Implementando Unidades de Prueba
Figura 17
14. Completar el código de los distintos métodos para que se vea la unidad de prueba como el que figura a continuación: 1. private UtilidadesDeCadena u; 2. @Before 3. public void setUp() throws Exception { 4. u = new UtilidadesDeCadena(); 5. } 6. 7. 8. 9.
@After public void tearDown() throws Exception { u = null; }
10. 11. 12. 13. 14. 15. 16.
@Test public void testConcatenar() { String completo = "Buen día"; String s1 = "Buen"; String s2 = " día"; String res = u.concatenar(s1, s2); assertEquals(res, completo); }
17.
23.
@Test public void testPrimerCaracter() { String completo = "Buen día"; char c = u.primerCaracter(completo); assertEquals(c, 'B'); }
24. 25.
@Test public void testUltimoCaracter() {
18. 19. 20. 21. 22.
Lic. Marcelo Samia
10
JUnit, Implementando Unidades de Prueba 26. 27. 28. 29.
String completo = "Buen día"; char c = u.ultimoCaracter(completo); assertEquals(c, 'a'); }
Ejecutar la prueba unitaria. Para esto, hacer clic derecho sobre el nombre de la clase de test y en el menú desplegable seleccionar Run AsJUnit Test, como muestra la figura 18
Figura 18
13. A continuación se abrirá una pestaña nueva al lado de la de “Package Explorer” donde se muestra el resultado de la ejecución. En ella se puede ver información de cuántos métodos de test se ejecutaron, cuántos dieron error y cuantos dieron falla como resultado. En la figura 19 se muestra el resultado de una ejecución correcta y sin errores o fallas. Esto se sabe por el ícono con la tilde verde al lado del nombre de la unidad de prueba.
Lic. Marcelo Samia
11
JUnit, Implementando Unidades de Prueba
Figura 19
Si se despliega el árbol se puede apreciar los detalles de ejecución de cada método de la misma. Esto se puede apreciar en la figura 20. Notar que al costado derecho de cada método figura el tiempo de ejecución que demoró su ejecución en particular. Esto permite analizar el rendimiento que los mismos tienen al momento de efectuar la prueba. Revisar la pantalla y cada resultado con detalle
Figura 20
Tarea 2 – Agregar más casos de prueba al proyecto Realizar los siguientes pasos: 1. Crear una nueva unidad de prueba como muestra la figura 21 y llamarla “UtilidadesDeTextoTest”
Lic. Marcelo Samia
12
JUnit, Implementando Unidades de Prueba
Figura 21
Seleccionar como clase objetivo a “UtilidadesDeTexto”
Figura 22
Lic. Marcelo Samia
13
JUnit, Implementando Unidades de Prueba 2. Seleccionar el único método para probar de la clase “UtilidadesDeTexto” como muestra la figura 23 y presionar el botón “Finish”
Figura 23
3. Implementar el siguiente código de prueba 1. 2. 3. 4. 5.
private UtilidadesDeTexto ut; @Before public void setUp() throws Exception { ut = new UtilidadesDeTexto(); }
6. @After 7. public void tearDown() throws Exception { 8. ut = null; 9. } 10. @Test 11. public void testContarPalabras() { 12. String texto= "uno más uno más uno"; 13. int cantidad = ut.contarPalabras(texto, "uno"); 14. assertEquals(3, cantidad); 15. }
4. Ejecutar la unidad de prueba como se muestra en la figura 24
Lic. Marcelo Samia
14
JUnit, Implementando Unidades de Prueba
Figura 24
5. Verificar que la prueba es exitosa como se muestra en la figura 25
Figura 25
6. Crear una nueva unidad de prueba como muestra la figura 26 y llamarla “UtilidadesDeEnterosTest”. Seleccionar como clase objetivo a “UtilidadesDeEnteros” y luego Presinar el botón “Next”
Lic. Marcelo Samia
15
JUnit, Implementando Unidades de Prueba
Figura 26
7. Seleccionar el único método para probar de la clase “UtilidadesDeEnteros” como muestra la figura 27 y presionar el botón “Finish”
Figura 27
8. Implementar el siguiente código de prueba 1. @Test 2. public void testPotencia() { 3. long l = ue.potencia(2,3); 4. assertEquals(8L, l); 5. }
Lic. Marcelo Samia
16
JUnit, Implementando Unidades de Prueba 9. Ejecutar la unidad de prueba como se muestra en la figura 28
Figura 28
10. Verificar que la prueba es exitosa como se muestra en la figura 29
Figura 29
Tarea 3 – Crear un conjunto de pruebas Realizar los siguientes pasos: 1. Hacer un clic derecho sobre el proyecto Test y seleccionar NewOther como muestra la figura 30
Lic. Marcelo Samia
17
JUnit, Implementando Unidades de Prueba
Figura 30
2. Crear un nuevo conjunto de prueba como muestra la figura 31
Figura 31
Lic. Marcelo Samia
18
JUnit, Implementando Unidades de Prueba 3. Llamar al conjunto de pruebas “AllTests”. En la ventana “New JUnit Test Suite” seleccionar todas la clases que se presentan en la sección “Test clases to include in suite”. El resultado final debe ser igual al mostrado en la figura 32
Figura 32
4. Verificar que se crea automáticamente el siguiente código y comprobar las clases que aparecen dentro de la marca @SuiteClasses 1. import org.junit.runner.RunWith; 2. import org.junit.runners.Suite; 3. import org.junit.runners.Suite.SuiteClasses;
4. 5. 6. 7. 8.
@RunWith(Suite.class) @SuiteClasses({ UtilidadesDeCadenaTest.class, UtilidadesDeEnterosTest.class, UtilidadesDeTextoTest.class }) public class AllTests { }
5. Ejecutar la unidad de prueba como se muestra en la figura 33
Lic. Marcelo Samia
19
JUnit, Implementando Unidades de Prueba
Figura 33
6. Verificar que el resultado sea como el mostrado en la figura 34
Figura 34
Ejercicio 2 – Aplicar unidades de verificación a la aplicación de Mensajes Tarea 1 – Creando una unidad de prueba para el modelo de la aplicación Mensajes Completar los siguientes pasos: 1. Abrir el espacio de trabajo que se encuentra en “DIR_DE_ARCHIVOS_DEL_CURSO\Ejercicios\Capítulo3\JUnit\Ejercicio2\workspace” 2. Crear un nuevo proyecto de tipo Java como muestra la figura 35 y nombrarlo “TestMensajes”
Lic. Marcelo Samia
20
JUnit, Implementando Unidades de Prueba
Figura 35
3. Seleccionar “Allow output folders …” para que los archivos compilados estén en otro directorio, en el TestMensajes\bin
Figura 36
Lic. Marcelo Samia
21
JUnit, Implementando Unidades de Prueba Una vez creado el proyecto, el explorador de paquetes debería verse como se muestra en la figura 37
Figura 37
4. Configurar el proyecto para que gane visibilidad en Mensajes con el que compone el espacio de trabajo. Para ello, el entorno debe modificar la variable CLASSPATH interna del proyecto para que acceda a las clases de los otros proyectos. Esto se consigue configurando el camino de construcción o “Build Path” como se muestra en la figura 38
Figura 38
5. En la ventana “Properties for Tests”, seleccionar la pestaña “Projects”. A continuación, en la sección “Required projects on the build path:” presionar el botón “Add” y agregar el proyecto Mensajes. La ventana tiene que verse como se muestra en la figura 39
Lic. Marcelo Samia
22
JUnit, Implementando Unidades de Prueba
Figura 39
Cuando se cierra la ventana, “Properties for Tests” se debería ver como muestra la figura 40
Figura 40
6. Crear un paquete dentro del proyecto TestMensajes y llamarlo “mvc”. 7. Generar una nueva prueba unitaria entro del paquete “mvc”. Para ello, presionar el botón derecho del mouse y en el menú desplegable que aparece seleccionar NewJunit Test Case como muestra la figura 41
Lic. Marcelo Samia
23
JUnit, Implementando Unidades de Prueba
Figura 41
8. Se despliega una ventana similar a la de creación de clases. Notar que por defecto aparece seleccionado “New JUnit 4 test” por defecto. Esta es la versión que se va a utilizar del “Framework” para crear la prueba unitaria. Realizar los siguientes pasos: a. Nombrar “ModeloTest” a la prueba unitaria. b. Seleccionar los cuadros de verificación para que se creen los métodos setup() y tearDown() automáticamente. No presionar el botón “Finish” aún. c. En la sección “Class under test:”, presionar el botón “Browse”. d. En el cuadro de texto debajo del título “Test stubs will be generated for the class:” escribir Modelo y debe aparecer al hacer esto en la sección “Matching ítems” la o las clases que coinciden con el nombre escrito. En este caso sólo hay una con dicho nombre, pero en caso de haber más de una en diferentes paquetes, se debe seleccionar la apropiada haciendo doble clic sobre el nombre correcto o seleccionándolo y presionando el botón “OK”. Realizar la mencionada selección. La ventana “New JUnit Test Case” se debe ver como muestra la figura 12 e. Notar que se habilita el botón “Next”. Presionarlo
Lic. Marcelo Samia
24
JUnit, Implementando Unidades de Prueba
Figura 42
9. Se despliega la siguiente ventana con los métodos que son visibles y factible de pruebas para poderlos seleccionar y que se generen automáticamente sus firmas de test con un bloque de sentencias asociado en blanco en el cual se puedan colocar las instrucciones. Seleccionar los métodos que son de interés para que se generen sus firmas de test correspondientes (en este caso, todos los de la clase Modelo, como muestra la figura 43). Notar que al poder acceder a todos los métodos que son visibles según como estén definidos los modificadores de visibilidad de los mismos, se incluyen también los que estén al alcance a lo largo de la cadena de herencia.
Lic. Marcelo Samia
25
JUnit, Implementando Unidades de Prueba
Figura 43
10. Como no se agregó el archivo de librería que contiene las clases del marco de trabajo (Framework) de JUnit, se despliega una ventana en la cual el entorno propone agregar la mencionada librería como muestra la figura 44. Si se hubiese agregado previamente dicha librería, esta ventana no aparecería. Notar que la librería propuesta corresponde a la versión 4 del “Framework” como se especificó en el momento de creación de la prueba unitaria. Presionar "OK".
Figura 44
La librería está contenida en un archivo comprimido con las clases que la componen cuya extensión es “.jar”, como se muestra en la Figura 45. Este tipo de archivos se puede crear con una aplicación para tal fin que se encuentra disponible en el directorio “\bin” de la instalación del JDK.
Lic. Marcelo Samia
26
JUnit, Implementando Unidades de Prueba
Figura 45
El editor de texto debe mostrar la prueba unitaria y los métodos generados automáticamente como muestra la figura 17. Notar que al generar los mencionados métodos se agregaron automáticamente, anteponiendo la palabra “test”, todos aquellos que eran visibles en la clase objetivo al momento de la generación que fueron seleccionados.
Figura 46
11. Confirmar que se han creado los siguientes métodos: 1. 2. 3. 4. 5. 6.
public public public public public public
Lic. Marcelo Samia
void void void void void void
setUp() throws Exception tearDown() throws Exception testModelo() testGetMensaje() testGetClima() testSetMensaje()
27
JUnit, Implementando Unidades de Prueba 7. public void testSetClima() 8. public void testAgregrarOyenteDeCambiosEnElModelo()
12. Ejecutar la clase como JUnit Test y verificar que ocurren 6 fallos debido a la invocación del método estático fail(). 13. Crear una variable de instancia de tipo Modelo y visibilidad privada. 14. Implementar el método setUp(). Escribir el bloque de sentencias del mismo como el código que se muestra a continuación: 1. @Before 2. public void setUp() throws Exception { 3. modelo = new Modelo(); 4. }
15. Implementar el método tearDown(). Escribir el bloque de sentencias del mismo como el código que se muestra a continuación: 1. @After 2. public void tearDown() throws Exception { 3. modelo = null; 4. }
16. Implementar el método testModelo(). Escribir el bloque de sentencias del mismo como el código que se muestra a continuación: 1. @Test 2. public void testModelo() { 3. Modelo modelo = new Modelo(); 4. assertTrue(modelo instanceof Modelo); 5. }
17. Ejecutar la clase como JUnit Test y verificar que ocurren 5 fallos ahora y el método testModelo() se ejecuta correctamente. 18. Implementar el método testGetMensaje(). Eliminar el método estático fail(). Escribir el bloque de sentencias del mismo como el código que se muestra a continuación: 1. @Test 2. public void testGetMensaje() { 3. String resultadoEsperado = "Bienvenido a mvc"; 4. String resultadoObtenido = modelo.getMensaje(); 5. assertEquals(resultadoEsperado, resultadoObtenido); 6. }
Este método realiza las siguientes acciones: a. Declara una variable del tipo String que almacena un mensaje igual al que maneja la aplicación inicialmente. b. Utiliza la referencia al modelo almacenada en la variable de instancia para acceder al método getMensaje() de éste. c. Utiliza ...