TestNG Vs JUnit: ¿Cuál es la diferencia?

Tabla de contenido:

Anonim

Tanto Testng como Junit son un marco de prueba utilizado para pruebas unitarias. TestNG es similar a JUnit. Se le agregan pocas funcionalidades más que hacen que TestNG sea más poderoso que JUnit.

Este tutorial se centra principalmente en analizar las características de JUnit y TestNG. Ayuda a los desarrolladores a decidir qué marco se debe utilizar para las pruebas unitarias. Primero analicemos las similitudes entre TestNG y JUnit4.

TestNG es un marco de prueba inspirado en JUnit y NUnit.

Aquí está la tabla que muestra las funciones compatibles con JUnit y TestNG.

Comparación de funciones JUnit4 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 destaca las funciones compatibles con ambos:

Anotaciones

Tanto JUnit como TestNG usan anotaciones y casi todas las anotaciones tienen un aspecto similar.

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 tabla a continuación para obtener más detalles.

SN Descripción TestNG JUnit 4
1 Prueba de anotación @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. @BeforeMethod @Antes
5 Se ejecuta después de cada método de prueba. @AfterMethod @Después
6 anotación para ignorar una prueba @Test (habilitar = falso) @ignorar
7 anotación de excepción @Test (excepciones esperadas = ArithmeticException.class) @Test (esperado = ArithmeticException.class)
8 se acabó el tiempo @Test (tiempo de espera = 1000) @Test (tiempo de espera = 1000)
9 Se ejecuta antes de todas las pruebas de la suite. @BeforeSuite 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 que se ejecuta 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í @AfterGroups 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 un método muy diferente para la ejecución de pruebas. Entendamos usando un fragmento de código como se indica a continuación:

Usando JUnit4

A continuación, la clase describe el uso de la suite mientras se trabaja con JUnit4:

paquete guru99.junit;import org.junit.runner.RunWith;import org.junit.runners.Suite;@RunWith (Suite.class)@ Suite.SuiteClasses ({SuiteTest1.class,SuiteTest2.class,})public class JunitTest {// Esta clase permanece vacía, se usa solo como un contenedor para las anotaciones anteriores}

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 trabaja con TestNG:

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:

@Ignorarmétodo de vacío público1 (){System.out.println ("Usando @Ignore, esta ejecución es ignorada");}

Usando TestNG

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

@Test (habilitado = falso)public void TestWithException (){System.out.println ("El método debe ignorarse porque aún no está listo");}

Prueba de excepción

Las pruebas de excepción están disponibles tanto en TestNG como en JUnit4. Se usa para verificar, ¿qué excepción se lanza de 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 (esperado = 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 (excepciones esperadas = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}

Se acabó el tiempo

Esta característica se implementa tanto en TestNg como en JUnit4.Timeout se usa para terminar una prueba que toma más tiempo que el 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 (tiempo de espera = 1000)método de vacío público1 (){mientras (verdadero);}

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)método de vacío público1 (){mientras (verdadero);}

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 (valor = Parameterized.class)public class JunitTest {número de privateint;public JunitTest6 (número int){this.number = número;}@ParámetrosColección estática pública  datos (){Objeto [] [] datos = nuevo Objeto [] [] {{1}, {2}, {3}, {4}};returnArrays.asList (datos);}@Pruebapublic void parameterTest (){System.out.println ("El número parametrizado es: + número);}}

Usando TestNG

En TestNG, el archivo XML o "@DataProvider" se utiliza para proporcionar un parámetro para la prueba.

Aquí la anotación @Parameters declarada en el método, necesita un parámetro para probar. 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.

test1 clase pública {@Prueba@Parameters (valor = "número")test de parámetro vacío público (número int){System.out.println ("El número parametrizado es: + número);}}

Vea a continuación el archivo xml que se utilizará para la clase anterior:

Resumen :

Vimos la comparación de JUnit4 y TestNG en detalle. 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.