Tutorial de anotaciones de JUnit con ejemplo

Tabla de contenido:

Anonim

¿Qué son las anotaciones JUnit?

JUNIT ANNOTATIONS es una forma especial de metadatos sintácticos que se puede agregar al código fuente de Java para mejorar la legibilidad y la estructura del código. Se pueden anotar variables, parámetros, paquetes, métodos y clases. Las anotaciones se introdujeron en Junit4, lo que hace que el código Java sea más legible y simple. Esta es la gran diferencia entre Junit3 y Junit4 que Junit4 se basa en anotaciones.

Con el conocimiento de las anotaciones en Junit5, uno puede aprender e implementar fácilmente una prueba JUnit. A continuación se muestra la lista de anotaciones importantes y de uso frecuente:

S.No. Anotaciones Descripción
1. @Prueba Esta anotación es un reemplazo de org.junit.TestCase que indica que el método de vacío 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 las condiciones previas, antes de cada caso de prueba.
3. @Antes de clase Esta anotación se utiliza si desea ejecutar algunas declaraciones antes de que 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. @Ignores 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. @Test (tiempo de espera = 500) Esta anotación se puede usar si desea establecer algún 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.class) Esta anotación se puede usar si desea manejar alguna excepción durante la ejecución de la prueba. Por ejemplo, si desea verificar si un método en particular está lanzando una excepción especificada o no.

En este tutorial, aprenderá:

  • Ejemplo de anotaciones JUnit
  • Clase Assert JUnit
  • Clase de casos de prueba JUnit
  • Clase TestResult JUnit
  • Clase de JUnit Test Suite

Ejemplo de anotaciones JUnit

Creemos una clase que cubra anotaciones importantes de JUnit con declaraciones de impresión simples y ejecútelas con una clase de corredor de prueba:

Paso 1) Considere la siguiente clase de Java que tiene varios métodos que se adjuntan a las anotaciones mencionadas anteriormente:

JunitAnnotationsExample.java

paquete guru99.junit;importar org.junit.Assert.assertEquals estático;importar org.junit.Assert.assertFalse estático;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 {lista privada ArrayList ;@Antes de clasepublic static void m1 () {System.out.println ("Usando @BeforeClass, ejecutado antes de todos los casos de prueba");}@Antespúblico vacío m2 () {list = new ArrayList  ();System.out.println ("Usando anotaciones @Before, ejecutadas antes de cada caso de prueba");}@Después de clasesvacío estático público m3 () {System.out.println ("Usando @AfterClass, ejecutado después de todos los casos de prueba");}@Despuéspublic void m4 () {list.clear ();System.out.println ("Usando @After, ejecutado después de cada caso de prueba");}@Pruebapublic void m5 () {list.add ("prueba");asertFalse (list.isEmpty ());asertEquals (1, list.size ());}@Ignorarpublic void m6 () {System.out.println ("Usando @Ignore, esta ejecución es ignorada");}@Test (tiempo de espera = 10)public void m7 () {System.out.println ("Usando @Test (tiempo de espera), se puede usar para hacer cumplir el tiempo de espera en el caso de prueba JUnit4");}@Test (esperado = NoSuchMethodException.class)public void m8 () {System.out.println ("Usando @Test (esperado), comprobará la excepción especificada durante su ejecución");}}

Paso 2) creemos una clase de corredor de prueba para ejecutar la prueba anterior:

TestRunner.java

paquete guru99.junit;import org.junit.runner.JUnitCore;import org.junit.runner.Result;import org.junit.runner.notification.Failure;TestRunner de clase pública {public static void main (String [] args) {Resultado resultado = JUnitCore.runClasses (JunitAnnotationsExample.class);for (Failure failure: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Resultado ==" + resultado.wasSuccessful ());}}

Resultado Esperado

  • Todos los casos de prueba se ejecutarán uno por uno, y todas las declaraciones de impresión se pueden ver en una consola.
  • Como se discutió en la tabla anterior @Before, @BeforeClass [método m1 () y m2 ()] se ejecutará antes y antes de todos los casos de prueba, respectivamente.
  • De la misma manera @ after, @ afterClass (método m3 () y m4 ()) se ejecutarán después de cada uno y después de todos los casos de prueba respectivamente. @ignore (método m6 ()) será tratado como ignorando 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:
@Pruebapublic void m5 () {list.add ("prueba");asertFalse (list.isEmpty ());asertEquals (1, list.size ());}

En el método anterior, ya que agrega una cadena en la variable "lista",

  • list.isEmpty () devolverá falso.
  • assertFalse (list.isEmpty ()) debe devolver verdadero.
  • Como resultado, el caso de prueba pasará .

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

  • list.size () debe devolver un valor int como "1".
  • Por lo tanto, assertEquals (1, list.size ()) debe devolver verdadero.
  • Como resultado, el caso de prueba pasará .
  1. Considere el método m7 () como se indica a continuación:
@Test (tiempo de espera = 10)public void m7 () {System.out.println ("Usando @Test (tiempo de espera), se puede usar para hacer cumplir el tiempo de espera en el caso de prueba JUnit4");}

Como se discutió anteriormente, la anotación @Test (timeout = 10) se usa para hacer cumplir el tiempo de espera en el caso de prueba.

  1. Considere el método m8 () como se indica a continuación:
@Test (esperado = NoSuchMethodException.class)public void m8 () {System.out.println ("Usando @Test (esperado), comprobará la excepción especificada durante su ejecución");}

Como se discutió anteriormente, @Test (esperado) buscará una 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.

Como 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 :

Vea a continuación las declaraciones impresas 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 (tiempo de espera), se puede usar para hacer cumplir el tiempo de espera en el caso de prueba JUnit4

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

Clase Assert JUnit

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

Como vio anteriormente, la siguiente tabla describe importantes métodos y descripciones de Assert:

S.No. Método Descripción
1. void assertEquals (booleano esperado, booleano real) Comprueba si dos valores son iguales al método igual de la clase Object
2. void assertFalse (condición booleana) La funcionalidad es verificar que una condición sea falsa.
3. void assertNotNull (objeto objeto) La funcionalidad "assertNotNull" es verificar que un objeto no sea nulo.
4. void assertNull (objeto objeto) La funcionalidad "assertNull" es verificar que un objeto sea nulo.
5. vacío asertTrue (condición booleana) La funcionalidad "assertTrue" es verificar que una condición sea verdadera.
6. vacío fallar () Si desea lanzar cualquier error de aserción, tiene fail () que siempre resulta en un veredicto fallido.
7. void assertSame ([Mensaje de cadena] La funcionalidad "assertSame" consiste en comprobar que los dos objetos se refieren al mismo objeto.
8. void assertNotSame ([Mensaje de cadena] La funcionalidad "assertNotSame" es verificar que los dos objetos no se refieran al mismo objeto.

Clase de casos de prueba JUnit

Para ejecutar múltiples pruebas, la clase TestCase está disponible en los paquetes org.junit.TestCase . La anotación @Test le dice a JUnit que este método de vacío público (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 la clase org.junit.TestCase :

S.No. Método Descripción
1. int countTestCases () Este método se utiliza para contar la cantidad de casos de prueba ejecutados por el método run (TestResult tr) .
2. TestResult createResult () Este método se utiliza para crear un objeto TestResult .
3. String getName () Este método devuelve una cadena que no es más que un TestCase .
4. TestResult run () Este método se utiliza para ejecutar una prueba que devuelve un objeto TestResult
5. ejecución vacía (resultado de TestResult) Este método se utiliza para ejecutar una prueba que tiene un objeto TestResult que no devuelve nada.
6. void setName (nombre de cadena) Este método se utiliza para establecer un nombre de TestCase.
7. configuración vacía () Este método se utiliza para escribir código de asociación de recursos. por ejemplo, cree una conexión a la base de datos.
8. vacío tearDown () Este método se utiliza para escribir código de liberación de recursos. por ejemplo, liberar la conexión de la base de datos después de realizar la operación de transacción.

Clase TestResult JUnit

Cuando ejecuta una prueba, devuelve un resultado (en forma de objeto TestResult ). Este objeto TestResult se puede utilizar para analizar el objeto resultante. El resultado de esta prueba puede ser incorrecto 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. void addFailure (prueba de prueba, AssertionFailedError t) Este método se utiliza si necesita agregar una falla a la lista de fallas.
3. void endTest (prueba de prueba) Este método se utiliza para notificar que se realiza (se completa) una prueba
4. int errorCount () Este método se utiliza para obtener el error detectado 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 failureCount () Este método se utiliza para obtener el recuento de errores detectados durante la ejecución de la prueba.
7. ejecución vacía (prueba TestCase) Este método se utiliza para ejecutar un caso de prueba.
8. int runCount () Este método simplemente cuenta la prueba ejecutada.
9. void startTest (prueba de prueba) Este método se utiliza para notificar que se inicia una prueba.
10. parada vacía () Este método se utiliza para probar la ejecución para detenerla.

Clase de JUnit Test Suite

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

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

S.No. Método Descripción
1. void addTest (prueba de prueba) Este método se utiliza si desea agregar una prueba a la suite.
2. void addTestSuite (Class testClass) Este método se utiliza si desea especificar la clase mientras agrega una prueba a la suite.
3. int countTestCases () 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 vacía (resultado de TestResult) Este método se utiliza para ejecutar una prueba y recopilar el resultado de la prueba en el objeto TestResult .
6. void setName (nombre de cadena) Este método se utiliza para establecer el nombre de TestSuite .
7. Prueba testAt (índice int) Este método se utiliza si desea devolver la prueba en un índice determinado.
8. int testCount () Este método se utiliza si desea devolver una serie 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 y anotaciones importantes útiles para escribir una prueba unitaria.
  • Clases que son muy útiles al escribir un caso de prueba.
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • lista de anotaciones importantes y de uso frecuente

    @Antes

    @Antes de clase

    @Después

    @Después de clases

    @Prueba

    @Ignorar