17
JUnit JMock

Junit y Jmock

  • Upload
    kaolong

  • View
    1.749

  • Download
    0

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Junit y Jmock

JUnitJMock

Page 2: Junit y Jmock

Temario

1. Test Unitarios, importancia

2. TDD (Desarrollo guiado por tests)

3. Framework JUnit para testeo unitario

4. JMock

1. ¿Qué es?

2. Ejemplo

Page 3: Junit y Jmock

Sistema

¿Porqué usar Test Unitarios?

Módulo 1Módulo 1

Módulo 2Módulo 2

Módulo 3Módulo 3

Módulo 4Módulo 4

Page 4: Junit y Jmock

Tests Unitarios

•La idea es escribir casos de prueba para cada función no trivial o método, de forma que cada caso de prueba sea independiente del resto.

•Un mismo método puede tener varios casos de prueba, por las distintas respuestas satisfactorias o de error que pudiera entregar.

Page 5: Junit y Jmock

Tests Unitarios, Características•Automatizable: en la ejecución de un caso de prueba

no debe intervenir el desarrollador (Integración Continua)

•Completas: se debe desarrollar tantos casos de prueba como para cubrir la mayor cantidad de código (Code Coverage, ej: Sonar)

•Repetibles: la idea es desarrollar los casos de prueba una vez y que se puedan ejecutar tantas veces se quiera, para validar que ante un mismo escenario la respuesta deba ser la misma.

•Independientes: la ejecución de una prueba no debe afectar la ejecución de otra. Es mas fácil de mantener y si hay algún error, este no se acarreará para los siguientes casos de prueba.

Page 6: Junit y Jmock

Test-Driven Development (TDD)

•Es una técnica usada para desarrollar un mejor software de forma mas rápida.

•TDD se basa en la siguiente idea:

Escribir los test para tu código antes que escribas el código.

•La idea principal es que los requisitos del sistema sean traducidos a pruebas, de este modo, cuando las pruebas pasen, se garantizará que los requisitos se hayan implementado correctamente.

Page 7: Junit y Jmock

Procedimientos de TDD

1. Elegir un requisito2. Escribir una prueba: el programador debe

entender claramente las especificaciones y los requisitos de la funcionalidad que está por implementar. Este paso fuerza al programador a tomar la perspectiva de un cliente considerando el código a través de sus interfaces.

3. Verificar que la prueba falla4. Escribir la implementación (de forma

sencilla)5. Ejecutar las pruebas automatizadas6. Eliminación de duplicación (refactoring)7. Actualización de la lista de requisitos

Page 8: Junit y Jmock

Framework JUnit para testeo unitario

•JUnit es un conjunto de clases (framework) que permite realizar la ejecución de clases Java de manera controlada, para poder evaluar si el funcionamiento de cada uno de los métodos de la clase se comporta como se espera.

•Sirve también para cuando se modifica una parte del código y se necesita saber si la modificación no altera la funcionalidad.

Page 9: Junit y Jmock

Métodos assert…

Método

assertTrue(expresión)

assertFalse(expresión)

assertEquals(esperado,real)

assertNull(objeto)

assertNotNull(objeto)

assertSame(objeto_esperado,objeto_real)

assertNotSame(objeto_esperado,objeto_real)

fail()

 assertArrayEquals(new double[] {1.0, 2.0}, new double[] {1.0, 2.0}, 0.01)

Page 10: Junit y Jmock

Ejemplos con JUnit

import junit.framework.*; /** * Un test de ejemplo sobre la clase String. */

public class EjemploTest extends TestCase {

public void testConcat() { String s = "hola"; String s2 = s.concat(" que tal");

assertTrue(s2.equals("hola que tal")); }}

Page 11: Junit y Jmock

Ejemplos con JUnit

public void testIndiceNoValido() { String s = "mensaje"; try {

char c = s.charAt(-5); fail("Debería haber lanzado una excepción");

} catch (IndexOutOfBoundsException e) { // si sale por aquí es que la prueba

salió bien

} }

Page 12: Junit y Jmock

Ejemplos con JUnit

Page 13: Junit y Jmock

JMock

¿Qué es?

JMock es un API para pruebas unitarias en Java, que utiliza JUnit para hacer algunas operaciones.

Para realizar pruebas a veces necesitamos que el método se comunique con otras clases para realizar su función. Entonces debemos crear la clase en primer lugar, pero esto se aparta de la idea del TDD. 

Para manejar estas situaciones existen algunas herramientas como JMock e EasyMock, que puede simular los objetos que interactúan con el método, por lo que no necesitamos crear un objeto real para terminar las pruebas.

Page 14: Junit y Jmock

Las ventajas de hacer pruebas con “mocks” son:

• Evitamos crear objetos ad-hoc para el contexto de la prueba que, además, pueden introducir u ocultar defectos.

• Podemos probar el comportamiento de nuestro objeto.

• Esto último es especialmente necesario en el caso de componentes a los que no podamos decirle assertEquals, y que debamos comprobar que interactúa con sus colaboradores como se haya definido.

JMock

Page 15: Junit y Jmock

Ejemplos JMock

Se necesita crear una aplicación que dependiendo de la hora, devuelva el saludo correcto: Buenos Días, Buenas Tardes y Buenas Noches.

De acuerdo a los procedimientos de TDD, primero debemos escribir la prueba:

public void testSaludar(){Saludo s = new Saludo(); String saludoFinal =

s.decirSaludo("compañeros");

//Comparar el resultado con el resultado esperado

assertEquals("Buenas Tardes, compañeros", saludoFinal);

   }

Page 16: Junit y Jmock

Ejemplos JMock

import org.jmock.Expectations;import org.jmock.integration.junit3.MockObjectTestCase;

public class PruebaSaludo extends MockObjectTestCase{

public void testSaludar() {

//Se simula la clase SaludoTiempo utilizando tecnología de reflection//se debe declarar como final, ya que será utilizado en una clase internafinal SaludoTiempo st = mock(SaludoTiempo.class);Saludo s = new Saludo();s.setSt(st);

//Se setean las expectations para el objeto mockchecking(new Expectations() {{

//El objeto mock será llamado una vez y se define que debe retornar "Buenas Tardes"

one(st).getSaludo(); will(returnValue("Buenas Tardes"));}});

String saludoFinal = s.decirSaludo("compañeros");

//Comparar el resultado con el resultado esperadoassertEquals("Buenas Tardes, compañeros", saludoFinal);

}}