El código marcado @Beforese ejecuta antes de cada prueba, mientras que se @BeforeClassejecuta una vez antes de todo el dispositivo de prueba. Si su clase de prueba tiene diez pruebas, el @Beforecódigo se ejecutará diez veces, pero @BeforeClasssolo se ejecutará una vez.
En general, se usa @BeforeClasscuando múltiples pruebas necesitan compartir el mismo código de configuración computacionalmente costoso. Establecer una conexión de base de datos cae en esta categoría. Puede mover el código desde @BeforeClassdentro @Before, pero su prueba de funcionamiento puede tomar más tiempo. Tenga en cuenta que el código marcado @BeforeClassse 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 @BeforeEachy @BeforeAllson equivalentes @Beforey @BeforeClassen 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'.
Solo agregaré que @BeforeAllpuede ser no estático y llamaré en cada nueva ejecución de instancia de prueba. Ver la respuesta correspondiente stackoverflow.com/a/55720750/1477873
Sergey
124
Las diferencias entre cada anotación son:
+-------------------------------------------------------------------------------------------------------+¦Feature¦Junit4¦Junit5¦¦--------------------------------------------------------------------------+--------------+-------------¦¦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 difieren.
La @Beforeanotación de la función se ejecutará antes de cada una de las funciones de prueba en la clase que tenga @Testanotación, pero la función con @BeforeClassse ejecutará solo una vez antes de todas las funciones de prueba en la clase.
Del mismo modo, la función con @Afteranotación se ejecutará después de cada una de las funciones de prueba en la clase que tenga @Testanotación, pero la función con @AfterClassse ejecutará solo una vez después de todas las funciones de prueba en la clase.
import org.junit.Assertimport org.junit.Beforeimport org.junit.BeforeClassimport org.junit.TestclassFeatureTest{
companion object {private lateinit var heavyFeature:HeavyFeature@BeforeClass@JvmStatic
fun beforeHeavy(){
heavyFeature =HeavyFeature()}}private lateinit var feature:Feature@Before
fun before(){
feature =Feature()}@Test
fun testCool(){Assert.assertTrue(heavyFeature.cool())Assert.assertTrue(feature.cool())}@Test
fun testWow(){Assert.assertTrue(heavyFeature.wow())Assert.assertTrue(feature.wow())}}
Igual que
import org.junit.Assertimport org.junit.TestclassFeatureTest{
companion object {private val heavyFeature =HeavyFeature()}private val feature =Feature()@Test
fun testCool(){Assert.assertTrue(heavyFeature.cool())Assert.assertTrue(feature.cool())}@Test
fun testWow(){Assert.assertTrue(heavyFeature.wow())Assert.assertTrue(feature.wow())}}
@BeforeClas
es estático. Se ejecuta antes de que se creen las instancias de clase de prueba.@BeforeAll
puede ser no estático y llamaré en cada nueva ejecución de instancia de prueba. Ver la respuesta correspondiente stackoverflow.com/a/55720750/1477873Las diferencias entre cada anotación son:
La mayoría de las anotaciones en ambas versiones son iguales, pero pocas difieren.
Referencia
Orden de ejecución.
Cuadro punteado -> anotación opcional.
fuente
Antes y antes Clase en JUnit
La
@Before
anotación de la función se ejecutará antes de cada una de las funciones de prueba en la clase que tenga@Test
anotación, pero la función con@BeforeClass
se ejecutará solo una vez antes de todas las funciones de prueba en la clase.Del mismo modo, la función con
@After
anotación se ejecutará después de cada una de las funciones de prueba en la clase que tenga@Test
anotación, pero la función con@AfterClass
se ejecutará solo una vez después de todas las funciones de prueba en la clase.SampleClass
Prueba de muestra
Salida
En junio 5
fuente
Igual que
fuente