test runwith jupiter example baeldung assertall java junit annotations junit4 junit5

java - runwith - jupiter test



Diferencia entre @Before, @BeforeClass, @BeforeEach y @BeforeAll (3)

¿Cuál es la principal diferencia entre

  • @Before y @BeforeClass
    • y en JUnit 5 @BeforeEach y @BeforeAll
  • @AfterClass y @AfterClass

Según JUnit Api @Before se utiliza en el siguiente caso:

Al escribir pruebas, es común encontrar que varias pruebas necesitan objetos similares creados antes de que puedan ejecutarse.

Mientras que @BeforeClass puede usarse para establecer una conexión de base de datos. ¿Pero no podría @Before hacer lo mismo?


El código marcado @Before se ejecuta antes de cada prueba, mientras que @BeforeClass ejecuta una vez antes de la prueba completa. Si su clase de prueba tiene diez pruebas, el código @Before se ejecutará diez veces, pero @BeforeClass se ejecutará solo una vez.

En general, usa @BeforeClass cuando varias pruebas necesitan compartir el mismo código de configuración computacionalmente costoso. El establecimiento de una conexión de base de datos cae en esta categoría. Puede mover el código de @BeforeClass a @Before , pero su ejecución de prueba puede llevar más tiempo. Tenga en cuenta que el código marcado @BeforeClass se ejecuta como inicializador estático, por lo tanto, se ejecutará antes de que se cree la instancia de clase de su dispositivo de prueba.

En JUnit 5 , las etiquetas @BeforeEach y @BeforeAll son los equivalentes de @Before y @BeforeClass en JUnit 4. Sus nombres son un poco más indicativos de cuándo se ejecutan, interpretados libremente: ''antes de cada prueba'' y ''una vez antes de todas las pruebas ''.


Antes y Antes de la Clase en JUnit

La función @Before anotación se ejecutará antes de que cada una de las funciones de prueba en la clase tenga la anotación @Test pero la función con @BeforeClass se ejecutará solo una vez antes de todas las funciones de prueba en la clase.

De manera similar, la función con @After se ejecutará después de que cada función de prueba en la clase tenga @Test pero la función con @AfterClass se ejecutará solo una vez después de todas las funciones de prueba en la clase.

SampleClass

public class SampleClass { public String initializeData(){ return "Initialize"; } public String processDate(){ return "Process"; } }

SampleTest

public class SampleTest { private SampleClass sampleClass; @BeforeClass public static void beforeClassFunction(){ System.out.println("Before Class"); } @Before public void beforeFunction(){ sampleClass=new SampleClass(); System.out.println("Before Function"); } @After public void afterFunction(){ System.out.println("After Function"); } @AfterClass public static void afterClassFunction(){ System.out.println("After Class"); } @Test public void initializeTest(){ Assert.assertEquals("Initailization check", "Initialize", sampleClass.initializeData() ); } @Test public void processTest(){ Assert.assertEquals("Process check", "Process", sampleClass.processDate() ); } }

Salida

Before Class Before Function After Function Before Function After Function After Class

En junit 5

@Before = @BeforeEach @BeforeClass = @BeforeAll @After = @AfterEach @AfterClass = @AfterAll


Las diferencias entre cada anotación son:

+-------------------------------------------------------------------------------------------------------+ ¦ Feature ¦ Junit 4 ¦ Junit 5 ¦ ¦--------------------------------------------------------------------------+--------------+-------------¦ ¦ Execute before all test methods of the class are executed. ¦ @BeforeClass ¦ @BeforeAll ¦ ¦ Used with static method. ¦ ¦ ¦ ¦ For example, This method could contain some initialization code ¦ ¦ ¦ ¦-------------------------------------------------------------------------------------------------------¦ ¦ Execute after all test methods in the current class. ¦ @AfterClass ¦ @AfterAll ¦ ¦ Used with static method. ¦ ¦ ¦ ¦ For example, This method could contain some cleanup code. ¦ ¦ ¦ ¦-------------------------------------------------------------------------------------------------------¦ ¦ Execute before each test method. ¦ @Before ¦ @BeforeEach ¦ ¦ Used with non-static method. ¦ ¦ ¦ ¦ For example, to reinitialize some class attributes used by the methods. ¦ ¦ ¦ ¦-------------------------------------------------------------------------------------------------------¦ ¦ Execute after each test method. ¦ @After ¦ @AfterEach ¦ ¦ Used with non-static method. ¦ ¦ ¦ ¦ For example, to roll back database modifications. ¦ ¦ ¦ +-------------------------------------------------------------------------------------------------------+

La mayoría de las anotaciones en ambas versiones son iguales, pero pocas diferencias.

Reference

Orden de Ejecución.

Cuadro de guiones -> anotación opcional.