Páginas

lunes, 9 de junio de 2014

JUnit - Test Parametrizados - ¿Como Parametrizar un test? - Annotation @Parameters - Parameterized.class

Hola ya contentos casi finalizando esta guía de  JUnit, hoy vamos a ver como parametrizar un clase, como siempre seguimos hablando de  JUnit 4.X.

JUnit  - ¿Como Parametrizar un test? - Annotation @Parameters - Parameterized.class

Bueno antes de ver como parametrizar vamos a aplicar que parametrizar un test nos sirve para correr un test con valores diferentes.

Para realizar esto tenemos utilizaremos un @RunWith indicando que se correrá con la clase Parameterized.class. Ver anotaciones JUnit (aca).

La case test debe contener un método estático anotado con la anotación @Parameterized.Parameters  o directamente @Parameters que genera y retorna una colección de matrices. Cada elemento de esta colección se utiliza como parámetro para el método de prueba.

También es necesario crear un constructor en el que guarde los valores de cada test. El número de elementos de cada matriz proporcionado por el método con la anotación @Parameters debe corresponder al número de parámetros en el constructor de la clase. Se crea la clase para cada parámetro y los valores de las pruebas se pasan a través del constructor a la clase. 

IMPORTANTE:
Los métodos que utilicen estos parámetros se ejecutaran n veces, donde n es la cantidad de elementos en la matriz.

Ejemplo:
package ar.com.ladooscurojava.model.test;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

/**
 * @author nconde
 */
@RunWith (value = Parameterized.class)
public class PerroTest {
  
  private String nombre;  
  public PerroTest(String nombre) {
     this.nombre = nombre;
  }
 
  @Parameters
  public static Collection<Object[]> data() {
    Object[][] data = new Object[][] { {"Fido" }, {"Dido"}, {"Rudolf" } };
    return Arrays.asList(data);
  }
  
  @Test
  public void testNombrePerros() {
    System.out.println("Nombre del perro: " + nombre);
  } 
}

Salida de consola
Nombre del perro: Fido
Nombre del perro: Dido
Nombre del perro: Rudolf

En el caso que quisiéramos probar con mas parámetros:

Ejemplo 2:
package ar.com.ladooscurojava.model.test;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
/**
 * @author nconde
 */

@RunWith (value = Parameterized.class)
public class PerroTest {
  
  private String nombre;
  private int edadPerro;
  
  public PerroTest(String nombre, int edadPerro) {
     this.nombre = nombre;
     this.edadPerro = edadPerro;
  }
 
  @Parameters
  public static Collection<Object[]> data() {
    Object[][] data = new Object[][] { {"Fido",4 }, {"Dido",5}, {"Rudo",10 } };
    return Arrays.asList(data);
  }
  
  @Test
  public void testNombrePerros() {
    System.out.println("Nombre del perro: " + nombre + ", Edad: " + edadPerro);
  } 
}

Fijase que en este ejemplo generamos el Array con 2 valores.

Salida de consola:
Nombre del perro: Fido, Edad: 4
Nombre del perro: Dido, Edad: 5
Nombre del perro: Rudo, Edad: 10
Links


No hay comentarios:

Publicar un comentario