TestNG

TestNG es un framework que permite realizar pruebas unitarias, funcionales, de integracion,... en aplicaciones java, es decir, comprueba que el comportamiento de los objetos sea el deseado. Esta basado en Junit, pero a diferencia de éste, TestNG añade nuevas funcionalidades (por ejemplo @DataProvider, @BeforeMethod,@BeforeClass,...). Como se habrás observado, nuestro framework se basado en anotaciones, al igual que Junit 4.0 (antes de dicha versión, se hacía heredando de la clase TestCase). Para evaluar aquellos métodos usamos la anotación @Test.

Veamos un ejemplo muy sencillo :


package es.cea.utilidades;

import org.testng.annotations.Test;


public class TestNG {

@Test
public void pruebaDevuelveValor(){

AlmacenaValor miValor=new AlmacenaValor(2);
assert (miValor.dameValor()==1):
"Lo que devuelve el objeto (miValor), es distinto de 2";
}
}

class AlmacenaValor{

int valor;
AlmacenaValor(int valor){
this.valor=valor;
}
int dameValor(){

return valor;
}
}

Como habreis comprobado en vuestro IDE ECLIPSE, el resultado ha fallado dado que hemos almacenado el valor 2 como parámetro en el constructor y lo estamos comparando con el valor 1.

La anotación @DataProvider consiste en evaluar un mismo método de forma iterativa, veamos un ejemplo para que se comprenda mejor:


package es.cea.utilidades;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestNG {

@DataProvider(name="pruebaConEstosValores")
public Object[][]teDoyValores(){
return new Object[][]{{1},{2},{3}};
}

@Test(dataProvider="pruebaConEstosValores")
public void pruebaDevuelveValor(int pruebaEntero){

AlmacenaValor miValor=new AlmacenaValor(2);
assert (miValor.dameValor()==pruebaEntero):
"Lo que devuelve el objeto (miValor), es distinto de 2";
}
}

class AlmacenaValor{
int valor;
AlmacenaValor(int valor)
{
this.valor=valor;
}
int dameValor(){
return valor;
}
}

En este ejemplo, cuando el valor del parámetro (pruebaEntero) valga 1 y 3, el test no tendrá éxito, mientras que para el otro caso (valga 2) si lo tendrá.

Como ya se mencionó antes, existen otras anotaciones de utilidad, como @BeforeClass, @BeforeMethod,...

Otra característica es el uso de una suite (fichero basado en xml). Esto es de gran utilidad ya que ejecuta a la vez todos aquellos métodos que tengan la anotación @Test del paquete indicado, en vez de ir uno por uno. He aquí un ejemplo:

Fichero testng.xml (puede llamarse como uno quiera):

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite1" verbose="1" >
<test name="Regression1" >
<packages>
<package name="nombre.paquete.*" />
</packages>
</test>
</suite>

En una misma suite, puede indicarse más de un paquete.

1 comentario:

Anónimo dijo...

Como hago para que el test que yo realizo me tome el archivo test-ng.xml, ya que si hago un ejemplo el genera un propio archivo xml para la suite