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.
¿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:
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.