2010-02-22 26 views
6

Possiedo una suite di test JUnit 4 con i metodi BeforeClass e AfterClass che eseguono un'installazione/rimozione per le seguenti classi di test. Quello di cui ho bisogno è di eseguire le classi di test anche da loro stessi, ma per quello ho bisogno di uno scenario di setup/teardown (BeforeClass e AfterClass o qualcosa del genere) per ogni classe di test. Il fatto è che quando eseguo la suite non voglio eseguire il setup/teardown prima e dopo ogni classe di test, voglio solo eseguire il setup/teardown dalla suite di test (una volta). È possibile? Grazie in anticipo.Suite di prove Junit 4 e classi di test individuali

risposta

4

Non conosco alcun modo standard per farlo con JUnit. Il motivo, come probabilmente già sai, è che i tuoi casi di test dovrebbero funzionare indipendentemente l'uno dall'altro. Ciò riguarda i metodi "normali" di setup/teardown eseguiti prima e dopo ciascun metodo di test. L'impostazione della classe e il teardown sono un po 'diversi, anche se preferirei comunque eseguire i miei test in modo indipendente e stare fuori dalla zona problematica.

Tuttavia, se si è veramente convinti di ciò che si sta facendo, è possibile utilizzare un flag globale per segnalare se l'installazione di classe/di teardown deve essere eseguita e per verificarne lo stato nei metodi di installazione di classe/smontaggio . Nella tua suite di test, potresti includere una classe speciale come la prima, che non fa altro che eseguire la configurazione e impostare il flag globale per indicare ai veri casi di test che i loro metodi di setup/teardown della classe non devono essere eseguiti. Allo stesso modo, un'ultima classe speciale nella suite può eseguire il codice di rimozione. L'avvertenza è che temo che JUnit non garantisca l'ordine di esecuzione delle classi di test all'interno di una suite, sebbene molto probabilmente le esegua nell'ordine specificato - ma questo è solo un dettaglio di implementazione. Provalo, potrebbe funzionare per te, ma non c'è alcuna garanzia che farà sempre quello che ti aspetti.

+2

Grazie per la risposta, in realtà ho pensato di questo, ma ho pensato che forse ci fosse una soluzione migliore. La ragione di ciò che voglio fare è che la configurazione pulisce l'ambiente e reimposta il database in modo che richieda del tempo e questo è il motivo per cui non voglio eseguire l'installazione per ogni classe di test, ma devo farlo quando eseguo un test individuale. – Hypnus

3

Se si dispone di jUnit 4.7+, si consiglia di esaminare la nuova funzione denominata Regole (che viene spiegata in this blog post). Potrebbero non essere esattamente ciò che vuoi, ma probabilmente sono i migliori che ottieni con jUnit.

Presumibilmente TestNG offre migliori possibilità di raggruppamento dei test, ma non l'ho ancora esaminato personalmente.

0

No, non esiste un modo standard per farlo in JUnit, anche se potresti suggerire qualcosa come suggerito da Péter Török.

Si noti comunque che JUnit è più o meno abusante nel fare ciò. L'intero punto dell'unità verifica che siano indipendenti l'uno dall'altra. Questo perché le dipendenze tra i test creano un incubo di manutenzione totale (i test falliscono perché l'esecuzione è nell'ordine sbagliato).

Quindi vi consiglio di prendere in considerazione con forza se non è meglio solo sempre eseguire l'installazione ...

+0

Grazie, id lo ha preso in considerazione, ma l'installazione ha una durata molto più lunga rispetto al test del buco con tutte le classi di test :) – Hypnus

+0

Sento il tuo dolore :-(. Se dovessi fare anche questo, per i test con setup complicato (anche se era solo per classe). Una sorta di bandiera "Sono già inizializzato" è probabilmente la soluzione migliore. – sleske

Problemi correlati