TestNG. Pasar parámetros a los métodos test


Parámetros

Los métodos test no tienen porque tener parámetros, pero si necesitamos hacer uso de ellos podemos utilizar la anotación @DataProvider para crearlos y en la anotación @Test se indica que DataProvider se usará.
Un método anotado con @DataProvider devolverá un array de array de objetos (Object[][]), donde:
  1. el tamaño de la primera dimensión indica el número de veces que el método será invocado.
  2. la segunda dimensión contiene un array de objetos que deben ser compatibles con el tipo de parámetros del método test que hará uso de ellos.

Ejemplo:
package com.me.mytestng.clases;import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;public class ParametrosTest {

 
/**
   * Test que recibe dos parámetros.
   * @param nombre
   * @param edad
   */
   @Test(dataProvider =
"param1")
  
public void test2Parametros(String nombre, Integer edad) {
     System.
out.println("Nombre: " + nombre + " Edad: " + edad);
   }

 
/**
   * Método DataProvider.
   * Este método devolverá un array de array de objetos (Object[][]), donde
   * el tamaño de la primera dimensión indica el número de veces que el
   * método será invocado y la segunda dimensión contiene un array de
   * objetos que deben ser compatibles con el tipo de parámetros del
   * método test.
   * @return
   */
   @DataProvider(name =
"param1")
  
public Object[][] crear2Datos() {
    
return new Object[][]{
       {
"Alejandro", new Integer(33)},
       {
"Luis", new Integer(27)}
     };
   }

 
/**
   * Test que recibe un parámetro.
   * @param cadena
   */
   @Test(dataProvider =
"param2")
  
public void test1Parametro(String cadena) {
     System.
out.println("Cadena: " + cadena);
   }

 
/**
   * Método DataProvider.
   * Devolverá una cadena.
   * @return
   */
   @DataProvider(name =
"param2")
  
public Object[][] crearCadena() {
    
return new Object[][]{
        {
"Esto es una cadena"}
     };
   }
}

El resultado de ejecutar el test será:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.me.mytestng.clases.ParametrosTest
Cadena: Esto es una cadena
Nombre: Alejandro Edad: 33
Nombre: Luis Edad: 27
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.466 sec


Results :


Tests run: 3, Failures: 0, Errors: 0, Skipped: 0

Los datos que necesita un test pueden estar en una clase externa a la clase test. Para indicar la clase que contiene los datos se hace uso del atributo dataProviderClass en la anotación @Test.

Clase externa que provee los datos:
package com.me.mytestng.clases;import org.testng.annotations.DataProvider;public class StaticProvider {

   @DataProvider(name =
"datosExternos")
  
public static Object[][] crear2Datos() {
    
return new Object[][]{
       {
"Juan", new Integer(33)},
       {
"Antonio", new Integer(27)}
     };
   }

}

Clase test que hace uso de los datos externos:
package com.me.mytestng.clases;import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;public class ParametrosTest {

 
/**
   * Test con dos parámetros externos a esta clase.
   * @param nombre   * @param edad
   */
   @Test(dataProvider =
"datosExternos", dataProviderClass = StaticProvider.class)
  
public void test2ParametrosExternos(String nombre, Integer edad) {
     System.
out.println("Nombre: " + nombre + " Edad: " + edad);
   }
}

Entradas populares de este blog

Java. Texto de colores en la consola

JSP. 8 Ejemplo recojer datos

JSP. 4 Declaraciones, Expresiones y Scriplet