JUnit Tutorial de anotaciones con ejemplo: ¿Qué es @Test y @After?

¿Qué es JUnit ¿Anotaciones?

JUnit Anotaciones es una forma especial de metadatos sintácticos que se puede agregar a Java código fuente para una mejor legibilidad y estructura del código. Se pueden anotar variables, parámetros, paquetes, métodos y clases. Las anotaciones se introdujeron en Junit4, lo que facilita Java El código es más legible y simple. Esta es la gran diferencia entre Junit3 y Junit4: Junit4 se basa en anotaciones.

Con el conocimiento de las anotaciones en Junit5, uno puede aprender e implementar fácilmente un JUnit prueba. A continuación se muestran los importantes y utilizados con frecuencia. JUnit lista de anotaciones:

S.No. Anotaciones DESCRIPCIÓN
1. @Prueba Esta anotación es un reemplazo de org.junit.TestCase que indica que el método void público al que está adjunto se puede ejecutar como un caso de prueba.
2. @Antes Esta anotación se utiliza si desea ejecutar alguna declaración, como condiciones previas, antes de cada caso de prueba.
3. @Antes de clase Esta anotación se utiliza si desea ejecutar algunas declaraciones antes de todos los casos de prueba, por ejemplo. La conexión de prueba debe ejecutarse antes de todos los casos de prueba.
4. @Después Esta anotación se puede utilizar si desea ejecutar algunas declaraciones después de cada Caso de prueba por ejemplo, restablecer variables, eliminar archivos temporales, variables, etc.
5. @Después de clases Esta anotación se puede utilizar si desea ejecutar algunas declaraciones después de todos los casos de prueba, por ejemplo. Liberar recursos después de ejecutar todos los casos de prueba.
6. @Ignora Esta anotación se puede utilizar si desea ignorar algunas declaraciones durante la ejecución de la prueba, por ejemplo. deshabilitar algunos casos de prueba durante la ejecución de la prueba.
7. @Prueba(tiempo de espera=500) Esta anotación se puede utilizar si desea establecer un tiempo de espera durante la ejecución de la prueba, por ejemplo. si está trabajando bajo algún SLA (acuerdo de nivel de servicio) y las pruebas deben completarse dentro de un tiempo específico.
8. @Test(esperado=IllegalArgumentException.clase) Esta anotación se puede utilizar si desea controlar alguna excepción durante la ejecución de una prueba. Por ejemplo, si desea comprobar si un método en particular está generando una excepción específica o no.

JUnit Ejemplo de anotaciones

Creemos una clase que cubra importantes JUnit anotaciones con declaraciones de impresión simples y ejecutarlas con una clase de ejecutor de pruebas:

Paso 1) Considere a continuación la clase Java que tiene varios métodos adjuntos a las anotaciones mencionadas anteriormente:

Ejemplo de anotaciones Junit.java

package guru99.junit;		

import static org.junit.Assert.assertEquals;				
import static org.junit.Assert.assertFalse;				

import java.util.ArrayList;		

import org.junit.After;		
import org.junit.AfterClass;		
import org.junit.Before;		
import org.junit.BeforeClass;		
import org.junit.Ignore;		
import org.junit.Test;		

public class JunitAnnotationsExample {				

    private ArrayList<String> list;					

    @BeforeClass		
    public static void m1() {							
        System.out.println("Using @BeforeClass , executed before all test cases ");					
    }		

    @Before		
    public void m2() {					
        list = new ArrayList<String>();					
        System.out.println("Using @Before annotations ,executed before each test cases ");					
    }		

    @AfterClass		
    public static void m3() {							
        System.out.println("Using @AfterClass ,executed after all test cases");					
    }		

    @After		
    public void m4() {					
        list.clear();			
        System.out.println("Using @After ,executed after each test cases");					
    }		

    @Test		
    public void m5() {					
        list.add("test");					
        assertFalse(list.isEmpty());			
        assertEquals(1, list.size());			
    }		

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

    @Test(timeout = 10)			
    public void m7() {					
        System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");					
    }		

    @Test(expected = NoSuchMethodException.class)					
    public void m8() {					
        System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");					

    }		

}		

Paso 2) Creemos una clase de ejecutor de pruebas para ejecutar la prueba anterior:

PruebaRunner.java

package guru99.junit;		

import org.junit.runner.JUnitCore;		
import org.junit.runner.Result;		
import org.junit.runner.notification.Failure;		

public class TestRunner {				
			public static void main(String[] args) {									
      Result result = JUnitCore.runClasses(JunitAnnotationsExample.class);					
			for (Failure failure : result.getFailures()) {							
         System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      	

Resultado Esperado

  • Todos los casos de prueba se ejecutarán uno por uno y todas las declaraciones impresas se podrán ver en una consola.
  • Como se analiza en la tabla anterior @Antes de la anotación en JUnit, @BeforeClass [método m1() y m2()] se ejecutará antes de cada uno y antes de todos los casos de prueba, respectivamente.
  • De la misma manera @Después en JUnit, @afterClass (método m3() y m4()) se ejecutará después de cada uno y después de todos los casos de prueba respectivamente. @ignore (método m6()) se tratará como si ignorara la prueba.

Analicemos en detalle los casos de prueba utilizados en la clase Java anterior:

  1. Considere el método m5() como se indica a continuación:
	@Test		
    public void m5() {					
        list.add("test");					
        assertFalse(list.isEmpty());			
        assertEquals(1, list.size());			
    }		

En el método anterior, mientras agrega una cadena en la variable "lista", entonces

  • la lista esta vacía() devolverá falso.
  • afirmarFalso(lista.isEmpty()) debe devolver verdadero.
  • Como resultado, el caso de prueba pass.

Como ha agregado solo una cadena en la lista, el tamaño es uno.

  • lista.tamaño() debe devolver un valor int como “1”.
  • So afirmarEquals(1, lista.tamaño()) debe devolver verdadero.
  • Como resultado, el caso de prueba pass.
  1. Considere el método m7() como se indica a continuación:
@Test(timeout = 10)		
    public void m7() {					
        System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");					
    }		

Como se discutió anteriormente @Prueba(tiempo de espera = 10)La anotación se utiliza para imponer el tiempo de espera en el caso de prueba.

  1. Considere el método m8() como se indica a continuación:
@Test(expected = NoSuchMethodException.class)				
    public void m8() {					
        System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");					
    
    }		

Como se discutió anteriormente @Prueba (esperado) comprobará la excepción especificada durante su ejecución, por lo que el método m8() arrojará "No existe tal excepción de método". Como resultado, la prueba se ejecutará con una excepción.

Cuando se pasan todos los casos de prueba, esto da como resultado una ejecución de prueba exitosa.

Resultado actual

Como hay tres casos de prueba en el ejemplo anterior, todos los casos de prueba se ejecutarán uno por uno. Vea el resultado a continuación:

JUnit Ejemplo de anotaciones
JUnit Ejemplo de anotaciones

Vea las declaraciones impresas a continuación que se pueden ver en la consola:

Usando @BeforeClass, ejecutado antes de todos los casos de prueba

Usando anotaciones @Before, ejecutadas antes de cada caso de prueba

Usando @After, ejecutado después de cada caso de prueba

Usando anotaciones @Before, ejecutadas antes de cada caso de prueba

Usando @Test(timeout), se puede usar para hacer cumplir el tiempo de espera en JUnit4 caso de prueba

Usando @After, ejecutado después de cada caso de prueba

Usando anotaciones @Before, ejecutadas antes de cada caso de prueba

Usando @Test (esperado), verificará la excepción especificada durante su ejecución.

Usando @After, ejecutado después de cada caso de prueba

Usando @AfterClass, ejecutado después de todos los casos de prueba

JUnit Afirmar clase

Esta clase proporciona una serie de métodos de aserción útiles para escribir un caso de prueba. Si se pasan todas las declaraciones de afirmación, los resultados de la prueba son exitosos. Si alguna declaración de afirmación falla, los resultados de la prueba fallan.

Como vio anteriormente, la siguiente tabla describe métodos de afirmación importantes y una descripción:

S.No. Método DESCRIPCIÓN
1. void afirmarEquals (booleano esperado, booleano real) Comprueba si dos valores son iguales y similares al método igual de la clase Objeto.
2. afirmación nula Falso (condición booleana) La funcionalidad es comprobar que una condición es falsa.
3. vacío afirmarNotNull (objeto objeto) La funcionalidad "assertNotNull" consiste en comprobar que un objeto no es nulo.
4. void afirmarNull (objeto objeto) La funcionalidad "assertNull" consiste en comprobar que un objeto es nulo.
5. afirmación nula Verdadera (condición booleana) La funcionalidad "assertTrue" consiste en comprobar que una condición es verdadera.
6. fallo nulo() Si desea generar algún error de afirmación, tiene fail() que siempre resulta en un veredicto fallido.
7. void afirmarSame([Mensaje de cadena] La funcionalidad "assertSame" consiste en comprobar que los dos objetos se refieren al mismo objeto.
8. void afirmarNotSame([mensaje de cadena] La funcionalidad "assertNotSame" consiste en comprobar que los dos objetos no se refieren al mismo objeto.

JUnit Clase de casos de prueba

Para ejecutar múltiples pruebas, la clase TestCase está disponible en org.junit.Caso de prueba paquetes. La anotación @Test dice JUnit que este método público de anulación (caso de prueba aquí) al que está adjunto se puede ejecutar como un caso de prueba.

La siguiente tabla muestra algunos métodos importantes disponibles en org.junit.Caso de prueba clase:

S.No. Método DESCRIPCIÓN
1. int recuento de casos de prueba() Este método se utiliza para contar cuántos casos de prueba ejecutados por ejecutar (Resultado de la prueba tr) método.
2. Resultado de prueba crearResultado() Este método se utiliza para crear un Resultado de la prueba objeto.
3. String getName () Este método devuelve una cadena que no es más que un Caso de prueba.
4. Ejecución de resultado de prueba() Este método se utiliza para ejecutar una prueba que devuelve un Resultado de la prueba objeto
5. ejecución nula (resultado de TestResult) Este método se utiliza para ejecutar una prueba que tiene un Resultado de la prueba objeto que no devuelve nada.
6. void setName (nombre de cadena) Este método se utiliza para establecer el nombre de un Caso de prueba.
7. configuración nula() Este método se utiliza para escribir código de asociación de recursos. p.ej. Cree una conexión de base de datos.
8. desmontaje vacío() Este método se utiliza para escribir código de liberación de recursos. p.ej. Libere la conexión de la base de datos después de realizar la operación de transacción.

JUnit Clase de resultado de prueba

Cuando ejecuta una prueba, devuelve un resultado (en forma de Resultado de la prueba objeto). Este objeto TestResult se puede utilizar para analizar el objeto resultante. El resultado de esta prueba puede ser fallido o exitoso.

Consulte la siguiente tabla para conocer los métodos importantes utilizados en la clase org.junit.TestResult:

S.No. Método DESCRIPCIÓN
1. void addError(Prueba de prueba, Throwable t) Este método se utiliza si necesita agregar un error a la prueba.
2. anular addFailure (prueba de prueba, AssertionFailedError t) Este método se utiliza si necesita agregar una falla a la lista de fallas.
3. prueba final vacía (prueba de prueba) Este método se utiliza para notificar que se realiza (completa) una prueba.
4. int errorCount() Este método se utiliza para detectar el error durante la ejecución de la prueba.
5. Errores de enumeración() Este método simplemente devuelve una colección (enumeración aquí) de errores.
6. int número de fallos() Este método se utiliza para obtener el recuento de errores detectados durante la ejecución de la prueba.
7. ejecución nula (prueba TestCase) Este método se utiliza para ejecutar un caso de prueba.
8. int ejecutarContar() Este método simplemente cuenta la prueba ejecutada.
9. prueba de inicio anulada (prueba de prueba) Este método se utiliza para notificar que se ha iniciado una prueba.
10. parada vacía() Este método se utiliza para probar la ejecución y detenerla.

JUnit Clase de conjunto de pruebas

Si desea ejecutar varias pruebas en un orden específico, puede hacerlo combinando todas las pruebas en un solo lugar. Este lugar se llama salas de pruebas.

Consulte la siguiente tabla para conocer los métodos importantes utilizados en org.junit.Suite de pruebas clase:

S.No. Método DESCRIPCIÓN
1. anular addTest (prueba de prueba) Este método se utiliza si desea agregar una prueba a la suite.
2. void addTestSuite(Clase testClass) Este método se utiliza si desea especificar la clase mientras agrega una prueba al conjunto.
3. int recuento de casos de prueba() Este método se utiliza si desea contar el número de casos de prueba.
4. String getName () Este método se utiliza para obtener el nombre del conjunto de pruebas.
5. ejecución nula (resultado de TestResult) Este método se utiliza para ejecutar una prueba y recopilar el resultado de la prueba en Resultado de la prueba objeto.
6. void setName (nombre de cadena) Este método se utiliza para establecer el nombre de Banco de pruebas.
7. Prueba prueba en (índice int) Este método se utiliza si desea devolver la prueba en un índice determinado.
8. int pruebaContar() Este método se utiliza si desea devolver una cantidad de pruebas en la Suite.
9. Advertencia de prueba estática (mensaje de cadena) Este método devuelve una prueba que fallará y registrará un mensaje de advertencia.

Resumen

  • JUnit proporciona una API portátil, que proporciona todas las clases importantes y Selenium anotaciones útiles para escribir una prueba unitaria.
  • Clases que son muy útiles al escribir un caso de prueba.
    • org.junit.Afirmar
    • org.junit.Caso de prueba
    • org.junit.Resultado de la prueba
    • org.junit.Suite de pruebas
  • Importante y de uso frecuente JUnit lista de anotaciones@Antes@Antes de la Clase@Después

    @Después de clases

    @Prueba

    @Ignorar