JUnit JMock
Temario Test Unitarios, importancia  TDD (Desarrollo guiado por tests) Framework JUnit para testeo unitario JMock ¿Qué es? Ejemplo
¿Porqué usar Test Unitarios? Sistema Módulo 1 Módulo 2 Módulo 3 Módulo 4
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.
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.
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.
Procedimientos de TDD  Elegir un requisito 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 .  Verificar que la prueba falla Escribir la implementación (de forma sencilla) Ejecutar las pruebas automatizadas Eliminación de duplicación (refactoring) Actualización de la lista de requisitos
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.
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)
Ejemplos con JUnit import junit.framework.*; /** * Un test de ejemplo sobre la clase String. */  public class EjemploTest extends  TestCase  {  public  void   test Concat() {  String s = "hola";  String s2 = s.concat(" que tal");  assertTrue (s2.equals("hola que tal"));  } }
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  }  }
Ejemplos con JUnit
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.
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
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);     }
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 interna final SaludoTiempo st = mock(SaludoTiempo.class); Saludo s =  new Saludo(); s.setSt(st); //Se setean las expectations para el objeto mock checking( 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 esperado assertEquals("Buenas Tardes, compañeros", saludoFinal); } }
https://sites.google.com/a/pintailconsultingllc.com/java/jmock-examples http://testingalittle.blogspot.com/search/label/JMock%202%2B Más Ejemplos JMock

Junit y Jmock

  • 1.
  • 2.
    Temario Test Unitarios,importancia TDD (Desarrollo guiado por tests) Framework JUnit para testeo unitario JMock ¿Qué es? Ejemplo
  • 3.
    ¿Porqué usar TestUnitarios? Sistema Módulo 1 Módulo 2 Módulo 3 Módulo 4
  • 4.
    Tests Unitarios Laidea 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.
  • 5.
    Tests Unitarios, CaracterísticasAutomatizable : 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.
  • 6.
    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.
  • 7.
    Procedimientos de TDD Elegir un requisito 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 . Verificar que la prueba falla Escribir la implementación (de forma sencilla) Ejecutar las pruebas automatizadas Eliminación de duplicación (refactoring) Actualización de la lista de requisitos
  • 8.
    Framework JUnit paratesteo 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.
  • 9.
    Métodos assert… MétodoassertTrue(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)
  • 10.
    Ejemplos con JUnitimport junit.framework.*; /** * Un test de ejemplo sobre la clase String. */ public class EjemploTest extends TestCase { public void test Concat() { String s = "hola"; String s2 = s.concat(" que tal"); assertTrue (s2.equals("hola que tal")); } }
  • 11.
    Ejemplos con JUnitpublic 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 } }
  • 12.
  • 13.
    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.
  • 14.
    Las ventajas dehacer 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
  • 15.
    Ejemplos JMock Senecesita 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);    }
  • 16.
    Ejemplos JMock importorg.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 interna final SaludoTiempo st = mock(SaludoTiempo.class); Saludo s = new Saludo(); s.setSt(st); //Se setean las expectations para el objeto mock checking( 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 esperado assertEquals("Buenas Tardes, compañeros", saludoFinal); } }
  • 17.