TestNG vs JUnit – Diferencia entre ellos

Diferencia clave entre TestNG y JUnit

  • TestNG es un Javamarco basado en, mientras JUnit es un marco de pruebas unitarias de código abierto para JAVA.
  • Comparando TestNG Vs JUnit, TestNG Las anotaciones 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.
  • In TestNG, Los casos de prueba se pueden agrupar, mientras que en JUnit, No es posible agrupar pruebas.
TestNG vs JUnit
TestNG vs JUnit

¿Qué es el TestNG?

TestNG 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.

Gracias a 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 Los desarrolladores escriben y ejecutan pruebas repetibles. Erich Gamma y Kent Beck lo desarrollan inicialmente. Es una instancia de la arquitectura xUnit. Como su nombre lo indica, se utiliza para Examen de la unidad de un pequeño trozo de código.

Los desarrolladores que siguen una metodología basada en pruebas deben escribir y ejecutar pruebas unitarias primero, antes de 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

Ambos TestNG y JUnit4 parece 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

Ambos JUnit y TestNG utiliza anotaciones y casi todas las anotaciones son similares.

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

Ambos TestNG y Junit4 usa @Test(timeout = 1000) para el tiempo de espera. Consulte la tabla a continuación para obtener más detalles:

SN Descripción TestNG JUnit 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 usando ambos TestNG y JUnit4. Sin embargo, las suites son más poderosas en TestNG ya que utiliza un método muy diferente para la ejecución de pruebas. Entendámoslo usando el fragmento de código que se muestra a continuación:

Gracias a 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		
}

Gracias a TestNG

TestNG utiliza 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:

Gracias a 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");
}

Gracias a 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 excepción están disponibles tanto en TestNG y JUnit4. Se utiliza para comprobar qué excepción se genera en la prueba.

Gracias a 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;
}

Gracias a 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 función se implementa tanto en TestNg como JUnit4.El tiempo de espera se utiliza para finalizar una prueba que tarda más que el tiempo especificado (en milisegundos).

Gracias a 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);  
}

Gracias a 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. Ambos TestNG y JUnit admite pruebas parametrizadas pero difieren en la forma en que definen el valor del parámetro. Veamos esto uno por uno.

Gracias a 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);
     }
}

Gracias a TestNG

In 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 proporcionarán en TestNGLos archivos de configuración XML. 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>

Resum

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