DPJ MÓdulo 3 Capítulo 3 - Ejercicios - JUnit, Implementando Unidades de Prueba PDF

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 PDF
Total Downloads 86
Total Views 120

Summary

Ejercicios - JUnit, Implementando Unidades de Prueba...


Description

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 NewJunit 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 AsJUnit 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 NewOther 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 NewJunit 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 ...


Similar Free PDFs