Páginas

26/1/15

JUnit assume

JUnit assume. Tipos de assumptions.

JUnit assume. Tipos de assumptions.




JUnit Assume Tutorial. JUnit assume que es?? Este poderoso framework para hacer pruebas unitarias aparte de los metodos assertions(Afirmaciones), posee los metodos de assumptions(Supuestos) que sirven para hacer las pruebas unitarias un poco mas fuertes. Supongamos que escribimos nuestro test y antes de hacer el assert queremos asumir que un objeto tiene el valor que nosotros creemos que tendra para llevar a cabo la prueba, ahora si el objeto no tiene el valor que estamos asumiendo la prueba falla lanzando la excepcion AssumptionViolatedException, el hecho de que un supuesto assume falle no quiere decir que todo el test esta malo pero si nos permite hacer las pruebas unitarias un poco mas fuertes, así no tenemos que ejecutar todo el test para saber si pasa o no la prueba. A continuación te presento un ejemplo:
 // Solo haremos la prueba unitaria si la conexión a la base de datos esta bien.
 @Test
 public void testAssume() {
  CallableStatement callableStatement = null;
  Connection connection = null;
  connection = getConnection();

  assumeNotNull(connection);
  // ..
 }
 

A continuación les voy a detallar todos los metodos assumptions(Supuestos) que posee JUnit.

Estos son los tipos de supuestos (assumptions) que hay disponible hasta el momento:
Assumptions Descripción
assumeNoException Se usa para asumir que una operación se completo normalmente.
assumeNotNull Se usa par asumir que un objeto no esta null.
assumeThat A diferencia de los demas metodos este utiliza un Matcher para asumir propiedades del objeto.
assumeTrue Se usa para asumir que un objeto esta true.

Aqui te dejo unos ejemplos para que los pongas en practica:

assumeNoException:
 @Test
 public void testAssumeNoException(String nombre) {
  CallableStatement callableStatement = null;
  Connection connection = null;
  String sql = "{ CALL  USER_DATOJAVA.PKG_PRUEBAS.SP_VALIDAR(?) }";
  try {
   connection = getConnection();
   callableStatement = connection.prepareCall(sql);
   callableStatement.setString(1, nombre);
   callableStatement.execute();
  } catch (SQLException ex) {
   // Si hay error hasta aqui llega la prueba
   assumeNoException(ex);
  }
  //..
 }

En el ejemplo anterior vemos que se logra hacer una conexion a la base de datos "supuestamente", en el caso de que halla una excepción en esa parte con el assumeNoException(ex) vamos a poder dejar de ejecutar la prueba unitaria, lo cual hace la prueba un poco mas fuerte.



assumeNotNull:

Supongamos que tenemos este metodo de prueba:
 @Test
 public void testClasesPorDia() {
  String[] clasesLunes = null;
  String dia = null;
  String diaParametro = "Sabado";

  // Verificamos el dia del parametro
  switch (diaParametro) {
  case "Lunes":
   dia = "Lunes";
   break;
  case "Martes":
   dia = "Martes";
   break;
  }
  try {
   assumeNotNull(dia);
   switch (dia) {
   case "Lunes":
    clasesLunes = new String[2];
    clasesLunes[0] = "matematica";
    clasesLunes[1] = "programacion";
    break;
   case "Martes":
   // ....    
  } catch (AssumptionViolatedException e) {
   fail("El supuesto no es el esperado: " + e.getStackTrace());
  }
  // ..
 }
Como vemos en el ejemplo anterior nosotros vamos asumir que la variable dia no puede estar null para seguir haciendo la prueba unitaria. En el ejemplo anterior la variable dia siempre sera null lo que quiere decir que lanza la excepción AssumptionViolatedException. Al ejecutar la prueba unitaria esto es lo que sucede:
assertArrayEquals Fail
assumeNotNull fail

assumeThat:

Este metodo es el que mas se usa cuando estamos asumiendo algo, este metodo trabaja al igual que el assertThat con Matcher, esto quiere decir que utilizamos la librería Hamcrest. Vamos a utilizar el ejemplo anterior para mostrar como se utiliza este metodo.
 @Test
 public void testClasesPorDia() {
  String[] clasesLunes = null;
  String dia = null;
  String diaParametro = "Lunes";

  //Primero vamos asumir que el "diaParametro" no esta vacio
  assumeThat(diaParametro, is(not("")));
  
  // Verificamos el dia del parametro
  switch (diaParametro) {
  case "Lunes":
   dia = "Lunes";
   break;
  case "Martes":
   dia = "Martes";
   break;
  }
  try {
   // Vamos asumir que el "dia" es = "Lunes"
   assumeThat(dia, is("Lunes"));
   
   //Si es "Lunes" ejecuta este codigo
   switch (dia) {
   case "Lunes":
    clasesLunes = new String[2];
    clasesLunes[0] = "matematica";
    clasesLunes[1] = "programacion";
    break;
   }
   //Ahora vamos asumir que el arreglo "clasesLunes" tiene 3 clases
   assumeThat(clasesLunes.length, is(3));
   // ....
  } catch (AssumptionViolatedException e) {
   fail("El supuesto no es el esperado: " + e);
  }
  // ..
 }
En el metodo vemos algunas variantes del assumeThat, si analizamos el codigo vemos que falla en la linea 32 ya que el arreglo no tiene 3 clases. Esto es lo que pasa.
assertFalse
assumeThat fail

assumeTrue:

Este es obvio que sirve para asumir que una variable se encuentra en true, igual les pondre su ejemplo para que vean como se utiliza.
 @Test
 public void testAssumeTrue() {
  boolean esCierto = false;

  int num1 = 3;
  int num2 = 6;

  int resultado = num1 + num2;

  if (resultado == 9) {
   esCierto = true;
  }
  assumeTrue(esCierto);
 }
Ya con este ejemplo terminamos con los metodos de assumptions.

No hay comentarios :

Publicar un comentario