2010-08-05 21 views
133

Cuando se prueban unidades 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()?Diferencia entre setUp() y setUpBeforeClass()

Estas son 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 { 
} 

Respuesta

176

Los @BeforeClass y @AfterClass métodos anotados se ejecutará exactamente una vez durante su prueba de funcionamiento - al principio y al final de la prueba en su conjunto, antes de ejecutar cualquier otra cosa. De hecho, se ejecutan incluso antes de que se construya la clase de prueba, por lo que deben declararse static.

Los métodos @Before y @After se 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.

Así que vamos a suponer que tenía tres pruebas en su clase, el orden de las llamadas de método 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() 
4

Desde the Javadoc:

veces varias pruebas necesidad de compartir computacionalmente costosa instalación (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 método no-arg public static void con @BeforeClass hace que se ejecute una vez antes de cualquiera de los métodos de prueba en la clase. Los métodos de superclases @BeforeClass se ejecutarán antes que los de la clase actual.

+0

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 utiliza para restablecer el estado de prueba a un valor conocido entre pruebas). – Syntax

6

setUpBeforeClass se ejecuta antes de cualquier ejecución método correcto después del constructor (ejecutar sólo una vez)

instalación se ejecuta antes de cada ejecución del método

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

tearDownAfterClass se ejecuta faet r todas las demás ejecuciones de métodos, es el último método para ser ejecutado. (ejecute solo una vez el deconstructor)

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 todos los casos de prueba. Definitivamente, debe tener cuidado con los recursos estáticos que no son seguros para subprocesos.

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

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

+0

BTW si comienzas a escribir pruebas unitarias, recomendaría este bote de mi blog. También tiene sugerencias sobre otro gran material sobre pruebas unitarias: http://madhurtanwani.blogspot.com/search/label/mock – madhurtanwani