TestNG vs JUnit: diferencia entre ellos

Diferencia clave entre TestNG y JUnit

  • TestNG es un marco basado en Java, mientras que JUnit es un marco de pruebas unitarias de código abierto para JAVA.
  • Al comparar TestNG con JUnit, las anotaciones de TestNG son más fáciles de usar y comprender que JUnit.
  • TestNG nos permite crear pruebas paralelas, mientras que JUnit no admite la ejecución de pruebas paralelas.
  • En TestNG, los casos de prueba se pueden agrupar, mientras que en JUnit, no es posible agrupar pruebas.
TestNG frente a JUnit
TestNG frente a JUnit

¿Qué es TestNG?

PruebaNG es un marco de pruebas de automatización en el que NG significa "Próxima Generación". TestNG está inspirado en JUnit que utiliza las anotaciones (@). TestNG supera las desventajas de JUnit y está diseñado para hacer pruebas de extremo a extremo fácil.

Con TestNG, puede generar un informe adecuado y puede saber fácilmente cuántos casos de prueba se aprobaron, fallaron y se omitieron. Puede ejecutar los casos de prueba fallidos por separado.

¿Qué es Junit?

JUnit es una unidad de código abierto Pruebas Marco para JAVA. Es útil para Java Desarrolladores para escribir y ejecutar pruebas repetibles. Erich Gamma y Kent Beck lo desarrollaron inicialmente. Es una instancia de xUnit architectura. Como su nombre lo indica, se utiliza para Examen de la unidad de un pequeño trozo de código.

Desarrolladores que siguenwing La metodología basada en pruebas debe escribir y ejecutar pruebas unitarias primero antes que cualquier código.

Una vez que haya terminado con el código, debe ejecutar todas las pruebas y debería pasar. Cada vez que se agrega algún código, debe volver a ejecutar todos los casos de prueba y asegurarse de que no haya ningún error.

Diferencias entre JUnit y TestNG

Tanto TestNG como JUnit4 tienen un aspecto similar, excepto una o dos características. Hagamos una comparación entre los dos para decidir rápidamente qué tecnología es más favorable para las pruebas unitarias. La siguiente tabla resalta las características admitidas por ambos:

Diferencias entre JUnit y TestNG

Anotaciones

Tanto JUnit como TestNG usan anotaciones y casi todas las anotaciones son similares.

TestNG usa @BeforeMethod, @AfterMethod similar a @Before, @After en JUnit4.

Tanto TestNG como Junit4 usan @Test(timeout = 1000) para el tiempo de espera. Consulte la siguiente tabla para obtener más detalles.tails-

SN Descripción PruebaNG Unidad 4
1 Anotación de prueba @Prueba @Prueba
2 Se ejecuta antes de que se invoque el primer método de prueba en la clase actual. @Antes de clase @Antes de clase
3 Se ejecuta después de todos los métodos de prueba en la clase actual. @Después de clases @Después de clases
4 Se ejecuta antes de cada método de prueba. @Antes del método @Antes
5 Se ejecuta después de cada método de prueba. @Después del método @Después
6 anotación para ignorar una prueba @Prueba(habilitar=falso) @ignorar
7 anotación para excepción @Test(Excepciones esperadas = ArithmeticException.clase) @Test(esperado = ArithmeticException.clase)
8 tiempo de espera @Prueba(tiempo de espera = 1000) @Prueba(tiempo de espera = 1000)
9 Se ejecuta antes de todas las pruebas de la suite. @AntesSuite n / a
10 Se ejecuta después de todas las pruebas en la suite. @DespuésSuite n / a
11 Se ejecuta antes de que se ejecute una prueba. @AntesTest n / a
12 Se ejecuta después de ejecutar una prueba. @Después de la prueba n / a
13 Se ejecuta antes de que se invoque el primer método de prueba que pertenece a cualquiera de estos grupos. @AntesGrupos n / a
14 ejecutar después del último método de prueba que pertenece a cualquiera de los grupos aquí @DespuésGrupos n / a

Prueba de suite

Las suites se utilizan para ejecutar varias pruebas juntas. Las suites se pueden crear utilizando TestNG y JUnit4. Sin embargo, las suites son más poderosas en TestNG ya que utiliza métodos muy diferentes para la ejecución de las pruebas. Entendámoslo usando el fragmento de código que se muestra a continuación:

Usando JUnit4

La siguiente clase describe el uso de la suite mientras se trabaja con JUnit4:

package guru99.junit;		
import org.junit.runner.RunWith;		
import org.junit.runners.Suite;		

@RunWith(Suite.class)				
@Suite.SuiteClasses({				
    SuiteTest1.class,			
    SuiteTest2.class,			

})		

public class JunitTest {		
// This class remains empty,it is used only as a holder for the above annotations		
}

Usando TestNG

TestNG usa xml para agrupar todas las pruebas en un solo lugar. A continuación, xml describe el uso de la suite mientras se trabaja con TestNG:

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
<test name="testing">
<classes>
<class name="com.guru99.SuiteTest1" />
<class name="com.guru99.SuiteTest2" />
</classes>
</test>
</suite>

Ignorar prueba

Usando ambos podemos omitir una prueba. Veámoslo usando el ejemplo de código que se muestra a continuación:

Usando JUnit4

El siguiente fragmento de código describe el uso de la anotación @ignore mientras se trabaja con JUnit4:

@Ignore
public void method1() 
{
	System.out.println("Using @Ignore , this execution is ignored");
}

Usando TestNG

El siguiente fragmento de código describe el uso de la anotación @Test(enabled=false) mientras se trabaja con TestNG:

@Test(enabled=false)
public void TestWithException()
{  
	System.out.println("Method should be ignored as it's not ready yet");
}

Prueba de excepción

Las pruebas de excepciones están disponibles tanto en TestNG como en JUnit4. Se utiliza para comprobar qué excepción se genera en la prueba.

Usando JUnit4

El siguiente fragmento de código describe el uso de la prueba de excepción mientras se trabaja con JUnit4:

@Test(expected = ArithmeticException.class)  
public void divideByZero() 
{  
	Int i = 1/0;
}

Usando TestNG

El siguiente fragmento de código describe el uso de la prueba de excepción mientras se trabaja con TestNG:

@Test(expectedExceptions = ArithmeticException.class)  
public void divideByZero()
{  
Int i = 1/0;
}	

Tiempo de espera

Esta característica se implementa tanto en TestNg como en JUnit4. El tiempo de espera se utiliza para finalizar una prueba que tarda más que el tiempo especificado (en milisegundos).

Usando JUnit4

El siguiente fragmento de código describe el uso de la prueba de tiempo de espera mientras se trabaja con JUnit4:

@Test(timeout = 1000)  
public void method1()
{  
	while (true);  
}

Usando TestNG

El siguiente fragmento de código describe el uso de la prueba de tiempo de espera mientras se trabaja con TestNG:

@Test(timeOut = 1000)  
public void method1()
{  
	while (true);  
}

Prueba parametrizada

JUnit proporciona un enfoque de prueba más fácil y legible conocido como prueba parametrizada. Tanto TestNG como JUnit admiten pruebas parametrizadas pero difieren en la forma en que definen el valor del parámetro. Veamos esto uno por uno.

Usando JUnit4

Las anotaciones "@RunWith" y "@Parameter" se utilizan para proporcionar el valor del parámetro para la prueba unitaria. La anotación @Parameters debe devolver List[]. Este parámetro se pasará al constructor de la clase como argumento.

@RunWith(value = Parameterized.class)
public class JunitTest{
    
    privateint number;
    
    public JunitTest6(int number)
 {
    this.number = number;
     }

     @Parameters
    public static Collection<Object[]> data() 
{
       Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } };
    returnArrays.asList(data);
    }
     
     @Test
    public void parameterTest()
 {
    System.out.println("Parameterized Number is : " + number);
     }
}

Usando TestNG

En TestNG, se utiliza un archivo XML o "@DataProvider" para proporcionar un parámetro para las pruebas.

Aquí la anotación @Parameters declarada en el método necesita un parámetro para la prueba. Los datos utilizados como parámetro se proporcionarán en los archivos de configuración XML de TestNG. Al hacer esto, podemos reutilizar un solo Caso de prueba con diferentes conjuntos de datos, y podemos obtener diferentes resultados.

public class Test1 {

    @Test
    @Parameters(value="number")
    public void parameterTest(int number)
	{
    	System.out.println("Parameterized Number is : " + number);
    }
     
}

Vea el siguiente archivo xml que se utilizará para la clase anterior:

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
<test name="testing">
    
<parameter name="number" value="2"/>    

<classes>
<class name="com.guru99.Test1" />
</classes>
</test>
</suite>

Resumen

Vimos la comparación de JUnit4 y TestNG en details. También vimos que ambos son similares excepto la prueba parametrizada y la prueba de dependencia. En resumen, podemos decir que, según la flexibilidad y los requisitos, podemos elegir cualquiera de ellos para las pruebas unitarias.