Diferencia entre setUp () y setUpBeforeClass ()

159

Cuando se realizan pruebas unitarias con JUnit, hay dos métodos similares, setUp() y setUpBeforeClass(). ¿Cuál es la diferencia entre estos métodos? Además, ¿cuál es la diferencia entre tearDown()y tearDownAfterClass()?

Aquí están las firmas:

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}
Sagar Varpe
fuente

Respuestas:

204

Los métodos anotados @BeforeClassy @AfterClassse ejecutarán exactamente una vez durante su ejecución de prueba, al principio y al final de la prueba en su conjunto, antes de que se ejecute cualquier otra cosa. De hecho, se ejecutan antes de que se construya la clase de prueba, por lo que deben declararsestatic .

Los métodos @Beforey @Afterse ejecutarán antes y después de cada caso de prueba, por lo que probablemente se ejecutarán varias veces durante una ejecución de prueba.

Supongamos que tuvo tres pruebas en su clase, el orden de las llamadas a métodos sería:

setUpBeforeClass()

  (Test class first instance constructed and the following methods called on it)
    setUp()
    test1()
    tearDown()

  (Test class second instance constructed and the following methods called on it)
    setUp()
    test2()
    tearDown()

  (Test class third instance constructed and the following methods called on it)
    setUp()
    test3()
    tearDown()

tearDownAfterClass()
Andrzej Doyle
fuente
15

Piense en "BeforeClass" como un inicializador estático para su caso de prueba, úselo para inicializar datos estáticos, cosas que no cambian en sus casos de prueba. Definitivamente, debe tener cuidado con los recursos estáticos que no son seguros para subprocesos.

Finalmente, use el método anotado "AfterClass" para limpiar cualquier configuración que haya hecho en el método anotado "BeforeClass" (a menos que su autodestrucción sea lo suficientemente buena).

"Antes" y "Después" son para inicialización específica de prueba unitaria. Normalmente uso estos métodos para inicializar / reinicializar las simulaciones de mis dependencias. Obviamente, esta inicialización no es específica para una prueba unitaria, sino general para todas las pruebas unitarias.

madhurtanwani
fuente
Por cierto, si comienzas a escribir una prueba unitaria, recomendaría este bote de mi blog. Tiene punteros a otro gran material sobre pruebas unitarias también: madhurtanwani.blogspot.com/search/label/mock
madhurtanwani
7

setUpBeforeClass se ejecuta antes de la ejecución de cualquier método justo después del constructor (se ejecuta solo una vez)

La configuración se ejecuta antes de la ejecución de cada método

tearDown se ejecuta después de la ejecución de cada método

tearDownAfterClass se ejecuta después de todas las demás ejecuciones de métodos, es el último método que se ejecutará. (ejecutar solo una vez deconstructor)

netbrain
fuente
5

Del Javadoc :

A veces, varias pruebas necesitan compartir una configuración computacionalmente costosa (como iniciar sesión en una base de datos). Si bien esto puede comprometer la independencia de las pruebas, a veces es una optimización necesaria. Anotar un public static voidmétodo sin argumentos @BeforeClasshace que se ejecute una vez antes que cualquiera de los métodos de prueba en la clase. Los @BeforeClassmétodos de las superclases se ejecutarán antes que los de la clase actual.

Justin King
fuente
La diferencia es que setUpBeforeClass se ejecuta antes de cualquiera de las pruebas y se ejecuta una vez; setUp se ejecuta una vez antes de cada prueba (y generalmente se usa para restablecer el estado de prueba a un valor bueno conocido entre pruebas).
Sintaxis