2010-08-05 1 views
133

Quando si esegue il test dell'unità con JUnit, esistono due metodi simili, setUp() e setUpBeforeClass(). Qual è la differenza tra questi metodi? Inoltre, qual è la differenza tra tearDown() e tearDownAfterClass()?Differenza tra setUp() e setUpBeforeClass()

Qui ci sono le firme:

@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 { 
} 

risposta

176

I @BeforeClass e @AfterClass metodi annotati verrà eseguito una sola volta durante la corsa di prova - proprio all'inizio e alla fine della prova nel suo complesso, prima di tutto viene eseguito. Infatti, vengono eseguiti prima che la classe di test venga persino costruita, motivo per cui devono essere dichiarati static.

I metodi @Before e @After verranno eseguiti prima e dopo ogni caso di test, quindi verrà eseguito più volte durante l'esecuzione di un test.

Quindi cerchiamo di assumere hai avuto tre prove nella tua classe, l'ordine delle chiamate di metodo sarebbe:

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

Da the Javadoc:

A volte diversi test necessità di condividere computazionalmente configurazione costoso (come la registrazione in un database). Mentre questo può compromettere l'indipendenza dei test, a volte è un'ottimizzazione necessaria. Annotando un metodo no-arg public static void con @BeforeClass si esegue una volta prima di uno qualsiasi dei metodi di test nella classe. I metodi di superclasse @BeforeClass verranno eseguiti prima di quelli della classe corrente.

+0

La differenza è che setUpBeforeClass viene eseguito prima di qualsiasi test ed è eseguito una volta; setUp viene eseguito una volta prima di ogni test (e viene solitamente utilizzato per ripristinare lo stato di test a un valore noto tra i test). – Syntax

6

setUpBeforeClass viene eseguito prima di ogni esecuzione metodo giusto dopo il costruttore (eseguito solo una volta)

setUp viene eseguito prima di ogni esecuzione metodo

tearDown viene eseguito dopo ogni esecuzione metodo

tearDownAfterClass viene eseguito afte r tutte le altre esecuzioni del metodo, è l'ultimo metodo da eseguire. (Eseguito solo una volta Deconstructor)

15

Pensate di "BeforeClass" come inizializzatore statico per il banco di prova - utilizzarlo per l'inizializzazione di dati statici - cose che non cambiano attraverso i vostri casi di test. Sicuramente vuoi stare attento alle risorse statiche che non sono thread-safe.

Infine, utilizzare il metodo annotato "AfterClass" per ripulire qualsiasi impostazione eseguita nel metodo annotato "BeforeClass" (a meno che la loro autodistruzione sia sufficiente).

"Prima" & "Dopo" sono per l'inizializzazione specifica del test dell'unità. Solitamente utilizzo questi metodi per inizializzare/re-inizializzare i mock delle mie dipendenze. Ovviamente, questa inizializzazione non è specifica per un test unitario, ma generale per tutti i test unitari.

+0

BTW se inizi a scrivere unit test ti consiglierei questo piatto dal mio blog. Ha anche puntato su un altro grande materiale sui test unitari: http://madhurtanwani.blogspot.com/search/label/mock – madhurtanwani